如何将 Ninject WCF 扩展与单例服务结合使用?

发布于 2024-11-24 07:08:30 字数 803 浏览 4 评论 0原文

我正在使用 Ninject 2.2.1.4 和 Ninject.Extensions.Wcf 2.2.0.4。

我的服务用以下属性装饰:

 [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]

使用上述属性,我收到错误:

“提供的服务类型无法作为服务加载,因为它没有默认(无参数)构造函数。要解决此问题,请向该类型添加默认构造函数,或将该类型的实例传递给主机。”

如果我删除属性 Ninject 将按预期工作。

经过一些研究后,我了解到,由于服务被标记为单例,因此 ServiceHost 将使用无参数构造函数自动创建它,因此会出现错误消息。为了解决这个问题,我必须自己创建服务对象,使用 ninject 解决,然后将该单例对象传递给 ServiceHost 来使用。我不知道该怎么做。

我查看了 WCF 扩展源,发现 NinjectServiceHost 继承自 ServiceHost,所以我的想法是使用重载构造函数将 NinjectServiceHost 绑定到我的服务对象实例:

 public NinjectServiceHost( object singletonInstance )
        : base( singletonInstance )
    {
    }

我不确定这是否正确,如果是,如何以及在哪里正确绑定它,以便 ServiceHost 可以提供给我的实例。

有什么建议吗?谢谢。

I'm using Ninject 2.2.1.4 and Ninject.Extensions.Wcf 2.2.0.4.

My service is decorated with the following attribute:

 [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]

Using the above attribute, I receive the error:

"The service type provided could not be loaded as a service because it does not have a default (parameter-less) constructor. To fix the problem, add a default constructor to the type, or pass an instance of the type to the host."

If I remove the attribute Ninject works as expected.

After doing some research it's my understanding that since the service is marked as a singleton it will automatically be created with a parameter-less constructor by the ServiceHost, hence the error message. In order to resolve the issue, I have to create the service object myself, resolved using ninject, and then pass that singleton object off to the ServiceHost to use. I'm not sure how to do that.

I looked at the WCF extension source and I see that NinjectServiceHost inherits from ServiceHost, so my thought was to bind NinjectServiceHost to my instance of the service object using the overloaded constructor:

 public NinjectServiceHost( object singletonInstance )
        : base( singletonInstance )
    {
    }

I'm not sure if that's correct and if it is, how and where to properly bind it so the ServiceHost can be fed my instance.

Any suggestions? Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

樱娆 2024-12-01 07:08:30

如果您可以使用 beta 版本,我建议更新到 2.3.x 它支持 IIS 托管的单例服务。另请参阅 github 上的示例

If you can live with a beta Version I suggest to update to 2.3.x It supports IIS hosted singleton Services. See also the examples on github

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文