我想将DI引入到现有的大型代码库中,该代码库具有多层继承和抽象(以及每个方向的引用!)。在最低级别之一,我想使用DI来控制特定对象的生活方式为单例(当前实现使用ThreadStatic并且存在问题)。我是否需要从顶部向下注入这个并将所有对象注册到容器中(这是很多工作)或者是否有一种方法可以做到这种快速和脏的风格(现在;)?我正在使用C#和Castle Windsor。
答案 0 :(得分:0)
您可以选择提供容器的服务定位器模式。 许多Is it bad to use servicelocation instead of constructor injection to avoid writing loads of factory classes被认为是一种不好的做法,但如果您的选择是拥有硬依赖和错误代码,那么可以认为它更好。在某种情况下,它不被认为是错误的http://codeofrob.com/entries/service-location-is-not-always-evil.html
然而,如果我是你,我会仔细阅读一下这个主题,看看它是如何满足你的需求和你的应用的。 DI / IoC辩论往往有点宗教,有时甚至是imho。