English 中文(简体)
引入IoC容器到遗留代码中
原标题:
  • 时间:2009-01-15 17:36:46
  •  标签:

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

然而,将要调用此库的代码当前并未使用任何形式的依赖注入,并且重构遗留代码以使用DI不在我的项目范围内。那么,在此遗留代码中开始使用容器以获取来自我的新库的实例的最佳方法是什么?

如果可能的话,我想避免在遗留代码中添加对任何选定的IoC容器的硬引用。由于我对DI相对较新,因此我们很可能在某些时候改变我们想要使用的容器。

如果我在我的容器周围包裹像CodePlex上的CommonServiceLocator库中的内容一样,这是否是一个合理的方法?

其他人做了什么?

最佳回答

你可以使用外观/代理模式来隐藏 DI 容器,使其与你的遗留容器分离。实质上,你会将你的遗留系统硬编码到一个自定义类中,该类将知道 DI 容器的信息。现在,如果你修改了你的 DI,你只需更新你的外观而不需要修改你的遗留代码。

我没有对常见服务定位器进行过多的研究,但它的前提可能是一个好的解决方案。你可能想把你的Facade与CSL联系起来,这将完全隐藏你的遗留代码中的DI概念。

问题回答

据我理解您的问题,您希望从遗留代码中调用启用DI的代码。

最佳选择是保持新的库DI友好,但是与容器无关。

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





相关问题
热门标签