关于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>
答案 0 :(得分:1)
这不是IOC容器问题。
虽然理论上你可以这样做:
Bind<Func<IMyInterface>>().ToConstant( context => context.Kernel.Get<DCF<IMC>>().CreateChannel)
然后在您的ctor中请求Func<IMyInterface>()
,并在您想要创建频道时调用它。
问题是CreateChannel()返回的对象同时实现IMyChannel
和IDisposable
,因此如果你要返回它,你就不能巧妙地使用它周围的使用块。这是工具在创建服务引用时为您生成的内容,而WCF OOTB在此处不提供一般机制。
我个人注入了一个工厂,并且它有一个Create<T>()
方法,它产生一个包装对象:
IDisposable
它不能注入一个帖子,所以希望很快就会有一个很好的包装类这种性质。
不确定Singleton是否合适,但我必须环顾四周才能确定。