如何将Ninject WCF扩展与单件服务一起使用?

时间:2011-07-15 13:20:49

标签: asp.net-mvc wcf ninject ninject-extensions

我正在使用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可以为我的实例提供。

有什么建议吗?感谢。

1 个答案:

答案 0 :(得分:1)

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