2017-01-31 2 views

ответ

1

Нет, контейнер DI не сам по себе является локатором сервисов, но его можно использовать как один. Это полностью зависит от его использования.

Пока вы используете контейнер внутриComposition Root, это not Service Locator. Однако, как только вы используете Контейнер за пределами Корень композиции, вызовы в контейнер (или абстракция над ним) становятся формой Service Locator anti-pattern.

2

Это Мартин Фаулер article упоминает различие между этими двумя:

Важным различием между этими двумя паттернами о том, что реализация предоставляются класс приложения. С помощью локатора сервисов класс приложения запрашивает его явно сообщением локатору. При инъекции нет явного запроса, служба появляется в классе приложения - следовательно, инверсия элемента управления.

+0

Цитата, которую вы используете, находится в «Service Locator vs Dependency Injection». Таким образом, в цитате описывается разница между Injection Dependency и Service Location, но это не отвечает на вопрос. Речь идет о * Контейнере *; инструмент, который может выполнять как впрыскивание зависимостей *, так и * местоположение службы. – Steven

Смежные вопросы