【问题标题】:Dependency Inject with Ninject 2.0Ninject 2.0 的依赖注入
【发布时间】:2010-09-07 15:34:44
【问题描述】:

关于 Ninject 的一个小问题。

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

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

但是我有点不确定如何绑定IMyChannel接口,因为我使用Ninject创建DuplexChannelFactory&lt;IMyChannel&gt;所以绑定IMyChannel我做Bind&lt; IMyChannel&gt;().???

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

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

    我个人注入了一个工厂,并让它有一个 Create&lt;T&gt;() 方法,该方法产生一个包装器对象:

    • 实现IDisposable
    • 可以跨通道调用方法。

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

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

    【讨论】:

    • 感谢您的回答鲁宾。对不起我迟到的回应,但我突然被其他项目牵制了。但现在回到这个问题上,会尝试你的建议并报告。
    猜你喜欢
    • 2015-10-09
    • 1970-01-01
    • 1970-01-01
    • 2016-10-08
    • 1970-01-01
    • 1970-01-01
    • 2011-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多