Локатор служб — шаблон проєктування, який інкапсулює логіку отримання сервісів. У деяких випадках цей шаблон є антипатерном.

Переваги та недоліки

Переваги

Спрощує впровадження залежностей для класу. Локатор служб виконує пошук сервісів під час виконання програми, що дозволяє підмінити служби без повторної компіляції, наприклад зчитуючи конфігурації із файлу, або що. Дозволяє створювати служби на вимогу.

Недоліки

Приховує залежності класу, що робить його підтримку не очевидною та ускладнює програму. Локатор служб має бути унікальним, але це робить його вузьким місцем, що спричиняє проблеми при розгортанні декількох аплікацій, чи одночасному доступі до нього із кількох потоків. Якщо локатор служб отримує налаштування динамічно (наприклад, з файлу), це може привести до не стабільної роботи програми, якщо конфігурацію задано невірно. Помилки появляються під час виконання програми, а не під час компіляції, коли можна отримати помилку типізації. Появляється залежність від контейнера, а не від необхідного сервісу. Важко контролювати час життя залежних служб.

Опис мовою C#

Нехай нам необхідно, створити екземпляр класу. Тоді необхідно передати всі параметри в конструктор.

Цей шаблон пропонує передати клас-фабрику, яка відповідальна за створення служб, довірити логіку створення конструктору та зменшити кількість його параметрів.

Також локатор може бути реалізований у вигляді одинака.

Див. також Шаблони проєктування програмного забезпечення Об'єктно-орієнтоване програмування Одинак (шаблон проєктування) Фабричний метод (шаблон проєктування) Інверсія керування IoC контейнер Реєстр (шаблон проєктування)

Джерела Programming stuff Какое главное отличие Dependency Injection от Service Locator?