将IoC容器引入旧版代码

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

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

如果可能的话,我想避免乱丢遗留代码,硬编辑我选择的任何IoC容器。 由于我对DI相对较新,我们有可能会改变我们想要在某个时刻使用哪个Container的想法。

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

其他人做了什么?

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

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

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

最好的选择是保持新库DI友好,但容器不可知 。

这样做,您可以提供遗留代码可以使用的简单Facade。 遗留应用程序无需使用任何DI容器,也无需使用Common Service Locator。