1

关于 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>().???

4

1 回答 1

1

这不是真正的 IOC 容器问题。

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

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

然后Func<IMyInterface>()在你的 ctor 中请求一个,只要你想创建一个频道就调用它。

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

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

  • 工具IDisposable
  • 有一种方法可以跨通道调用方法。

它不能注入到帖子中,因此希望有人很快就会使用这种性质的漂亮包装类。

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

于 2010-09-09T20:32:36.153 回答