2

我正在使用 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。

有什么建议么?谢谢。

4

1 回答 1

1

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

于 2011-07-15T14:10:29.267 回答