使用Ninject 2.0进行依赖注入

时间:2010-09-07 15:34:44

标签: wcf dependency-injection ninject wcf-client ninject-2

关于Ninject的一个小问题。

我使用WCF“双工通道”与服务进行通信。通道被定义为一个接口,为简单起见,我们称之为IMyChannel。要实例化频道,我们使用DuplexChannelFactory<IMyChannel>对象的CreateChannel()方法。 到目前为止,我已经设法将工厂类与此绑定。

Bind< DuplexChannelFactory< IMyChannel>>().ToMethod(context =>
    new DuplexChannelFactory< IMyChannel>(
        new MessageEndPoint(), 
        new NetTcpBinding(),
        "net.tcp://localhost:8321")).InSingletonScope();
    }
}

但是我有点不确定如何绑定IMyChannel接口,因为我使用Ninject来创建DuplexChannelFactory<IMyChannel>所以绑定IMyChannel我做Bind< IMyChannel>(). ??? < / p>

1 个答案:

答案 0 :(得分:1)

这不是IOC容器问题。

虽然理论上你可以这样做:

Bind<Func<IMyInterface>>().ToConstant( context => context.Kernel.Get<DCF<IMC>>().CreateChannel) 

然后在您的ctor中请求Func<IMyInterface>(),并在您想要创建频道时调用它。

问题是CreateChannel()返回的对象同时实现IMyChannelIDisposable,因此如果你要返回它,你就不能巧妙地使用它周围的使用块。这是工具在创建服务引用时为您生成的内容,而WCF OOTB在此处不提供一般机制。

我个人注入了一个工厂,并且它有一个Create<T>()方法,它产生一个包装对象:

  • 实施IDisposable
  • 可以通过渠道调用方法。

它不能注入一个帖子,所以希望很快就会有一个很好的包装类这种性质。

不确定Singleton是否合适,但我必须环顾四周才能确定。