Примечание: я не совсем отвечаю на вопрос. Но я чувствую, что это может быть полезно для новых изучающих шаблон «Внедрение зависимостей», которые путаются с ним с шаблоном Service Locator (anti-) , которые случайно наткнулись на эту страницу.
Мне известна разница между локатором службы (теперь он рассматривается как анти-шаблон) и шаблонами внедрения зависимостей, и я могу понять конкретные примеры каждого шаблона, но меня смутили примеры, показывающие локатор службы внутри конструктора ( предположим, что мы делаем инъекцию в конструктор).
«Сервисный локатор» часто используется как в качестве имени шаблона, так и в качестве имени для ссылки на объект (предположим, тоже), который используется в этом шаблоне для получения объектов без использования оператора new. Теперь этот же тип объекта можно также использовать в корне композиции для выполнения внедрения зависимостей, и здесь возникает путаница.
Следует отметить, что вы можете использовать объект локатора службы внутри конструктора DI, но вы не используете «шаблон локатора службы». Это менее запутанно, если вместо этого кто-то называет его контейнерным объектом IoC, поскольку вы, возможно, догадались, что они, по сути, делают то же самое (исправьте меня, если я ошибаюсь).
Независимо от того, называется ли он локатором службы (или просто локатором), или контейнером IoC (или просто контейнером), не имеет значения, как вы уже догадались, поскольку они, вероятно, ссылаются на одну и ту же абстракцию (исправьте меня, если я я не прав) Просто называя его локатором сервисов, можно предположить, что каждый использует анти-паттерн сервисного локатора вместе с паттерном внедрения зависимостей.
ИМХО, называя его «локатором» вместо «местоположения» или «определения местоположения», иногда можно подумать, что локатор службы в статье ссылается на контейнер локатора службы, а не на локатор службы (анти-локатор службы). -) шаблон, особенно когда есть связанный шаблон, называемый Dependency Injection, а не Dependency Injector.