10

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

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

如果可能的话,我想避免在我选择的任何 IoC 容器中使用硬引用的旧代码乱扔垃圾。由于我对 DI 比较陌生,因此我们很可能会在某个时候改变我们想要使用哪个 Container 的想法。

如果我将容器包装在 CodePlex 上的CommonServiceLocator库之类的东西中,那会是一种合理的方法吗?

其他人做了什么?

4

2 回答 2

4

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

我没有对 Common Service Locator 进行大量研究,但前提是它可能是一个很好的解决方案。您可能希望将外观与 CSL 联系起来,这将从您的遗留代码中完全隐藏 DI 概念。

于 2009-01-15T18:20:43.670 回答
2

据我了解您的问题,您想从旧代码中调用启用 DI 的代码。

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

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

于 2010-01-20T21:47:23.087 回答