将IoC容器引入旧版代码

时间:2009-01-15 17:36:47

标签: c# .net design-patterns dependency-injection

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

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

如果可能的话,我希望不遗余力地将遗留代码乱扔给我选择的任何IoC容器。由于我对DI比较陌生,所以我们有可能会改变我们想要在某个时刻使用哪个Container的想法。

如果我将我的容器包装在CodePlex上的CommonServiceLocator库中,那么这是一种合理的方法吗?

其他人做了什么?

2 个答案:

答案 0 :(得分:4)

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

我没有对Common Service Locator做过很多研究,但它的前提可能是一个很好的解决方案。您可能希望将外观与CSL联系起来,这将完全隐藏旧概念中的DI概念。

答案 1 :(得分:2)

据我了解你的问题,你想从遗留代码中调用启用DI的代码。

最佳选择是保留新库DI Friendly, but container-agnostic

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