我正在使用 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。
有什么建议么?谢谢。