如何在类库中使用依赖注入进行内部操作的最佳实践?

6

在构建一个足够复杂以使用内部依赖注入的类库时,需要注意哪些问题?

假设将使用Castle Windsor(作为示例),鉴于该库将被简单控制台应用程序(没有DI)、使用相同容器(Castle Windsor)的Web表单以及使用不同容器(NInject)的Web应用程序所使用,那么配置容器的最佳位置/方法是什么?

2个回答

6

我建议在这里使用外观模式:在库中,公开一个公共类的公共方法来执行容器初始化(例如一个简单的Initialize()),并且仅在库内部使用Castle Windsor,这样库的客户端甚至不知道你正在使用它。


5
根据OP中指定的要求,Facade模式似乎很适合。但我会质疑将DI容器隐藏为实现细节的决定是否明智,不过这可能取决于具体情况。 - Mark Seemann
这是一个不错的开始,谢谢。此外,我还可以使用Initialize()方法通过Castle DictionaryAdapter或类似的方式传递运行时所需的配置值打包在一个对象中,具体取决于调用应用程序。 - alexandrul
顺便提一下,我强烈建议使用工厂方法或类似的方法,而不是Initialize()方法。详情请见http://blog.ploeh.dk/2011/05/24/DesignSmellTemporalCoupling。 - Mark Seemann

3
并不是说这个答案不能用,但我认为任何来到这里的人都应该看一下这篇问答。阅读后,我必须同意在类库中使用IoC就像使用ServiceLocator(反模式),而且将库与容器耦合是一种反常现象
起初,我以为自己做了正确的事情,但最好的做法是先查一下资料。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接