2009-01-15 66 views
9

我正在编写一个新的.NET库供我的公司内部使用,该库将通过依赖注入来使用IoC。当然,如果我们使用IoC容器来解析实例,这个库会更容易使用。将IoC容器引入遗留代码

但是,将调用该库的代码目前不使用任何类型的依赖注入,并且重构遗留代码以使用DI不在我的项目范围内。那么,在这个遗留代码中开始使用Container来从我的新库中获取实例的最佳方式是什么?

如果可能的话,我希望不要乱丢遗留的代码,并严格引用我选择的任何IoC容器。由于我对DI相对来说比较陌生,因此我们有可能会改变我们在某个时候想要使用哪个Container的想法。

如果我将容器包装在CodePlex上的CommonServiceLocator库中,这是否合理?

还有其他人做了什么?

+0

http://davybrion.com/blog/2009/11/integrating-your-ioc-container-with-agatha/ – 2009-12-01 11:47:26

回答

3

您可以使用外观/代理模式从旧容器中隐藏DI容器。您基本上将您的遗产硬连线到您实施的自定义班级,该班级将了解DI容器。现在,如果您修改了DI,则可以更新外观而不是旧代码。

我对Common Service Locator没有做太多的研究,但它的前提可能是一个很好的解决方案。您可能希望将您的外观与CSL绑定,这将完全隐藏您的遗留代码。

1

正如我理解你的问题,你想从遗留代码调用启用DI的代码。

最好的选择是保持新库DI Friendly, but container-agnostic

这样做,您可以提供遗留代码可以使用的简单Facade。无需传统应用程序使用任何DI容器,也不需要通用服务定位器。