我正在使用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可以为我的实例提供。
有什么建议吗?感谢。
答案 0 :(得分:1)
如果您可以使用测试版,我建议更新到2.3.x它支持IIS托管单例服务。另请参阅github上的示例