2017-01-31 84 views

回答

1

不,DI Container本身不是服務定位器,但它可以像一個一樣使用。這完全取決於它的用途。

只要你使用容器Composition Root,它是一個not服務定位器。但是,一旦使用容器以外的組合根,調用容器(或其上的抽象)就成爲Service Locator anti-pattern的一種形式。

2

這Martin Fowler的article提到了兩者之間的區別:

兩個模式之間的重要區別是關於實現是如何提供給應用程序類。使用服務定位器,應用程序類會通過消息向定位器明確要求。通過注入沒有明確的請求,服務出現在應用程序類中 - 因此控制反轉。

+0

您使用的引用來自「Service Locator vs Dependency Injection」。所以引用描述了依賴注入和服務位置之間的區別,但是這並沒有回答這個問題。問題是關於* Container *;一個可以執行依賴注入*和*服務位置的工具。 – Steven