2017-01-31 42 views

回答

1

不,DI Container本身不是服务定位器,但它可以像一个一样使用。这完全取决于它的用途。

只要你使用容器Composition Root,它是一个not服务定位器。但是,一旦使用容器以外的组合根,调用容器(或其上的抽象)就成为Service Locator anti-pattern的一种形式。

2

这Martin Fowler的article提到了两者之间的区别:

两个模式之间的重要区别是关于实现是如何提供给应用程序类。使用服务定位器,应用程序类会通过消息向定位器明确要求。通过注入没有明确的请求,服务出现在应用程序类中 - 因此控制反转。

+0

您使用的引用来自“Service Locator vs Dependency Injection”。所以引用描述了依赖注入和服务位置之间的区别,但是这并没有回答这个问题。问题是关于* Container *;一个可以执行依赖注入*和*服务位置的工具。 – Steven