最近,我一直在大量阅读有关IoC,DI和服务定位器的信息,但我已经想到了一个问题。有时,DI使用容器来调用缺陷,对吗?但是那个容器不是服务定位器吗?
我看不出两者之间的区别。
最佳答案
是的,要在Composition Root之外使用或传递DI容器是Service Locator。根据Mark Seemann Compositon的定义,根为:
因此,只要您在那个唯一的位置使用容器,就不是服务定位器。
关于Service Locator的使用:有时您无法仅使用一个“合成根”来配置应用程序,外部库或框架的一部分。在这种情况下,您可以使用不是容器,而可以使用Abstract Factory,该容器配置为仅创建预定义和有限类型的资源。这是Mark Seemann "Pattern Recognition: Abstract Factory or Service Locator?"的另一篇文章
关于design-patterns - DI Container是服务定位器吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14014666/