Ale*_*eau 6 design-patterns dependency-injection inversion-of-control
我最近一直在阅读很多关于IoC,DI和服务定位器的内容,但是我的脑海中浮现出一个问题.DI有时使用容器来调用依赖项,对吧?但那个容器不是服务定位器吗?
我没有看到这两者之间的区别.
是的,在组合根之外使用或传递DI 容器是Service Locator。根据 Mark Seemann 的定义,组合根是:
组合根是应用程序中模块组合在一起的(最好)唯一位置。
因此,只要您在该唯一位置使用容器,它就不是服务定位器。
关于Service Locator的使用:有时您无法仅使用一个Composition Root来配置部分应用程序、外部库或框架。在这种情况下,您可以不使用容器,而使用配置为仅创建预定义和有限类型资源的抽象工厂。这是 Mark Seemann 的另一篇文章“模式识别:抽象工厂还是服务定位器?”