Sobes.tech
Back to questions
Junior — Middle
65

Использовали ли вы паттерн Service Locator в своих проектах для управляемого доступа к сервисам?

Companies where asked
Платформа

Answer from AI

sobes.tech AI

Да, паттерн Service Locator использовался мной в проектах для централизованного доступа к сервисам и компонентам приложения.

Service Locator представляет собой объект, который знает, как получить нужный сервис (например, через DI-контейнер или фабрику), и предоставляет его клиентам по запросу. Это упрощает управление зависимостями, особенно в больших приложениях.

Пример на C#:

public interface IService {}
public class MyService : IService {}

public class ServiceLocator
{
    private static readonly Dictionary<Type, object> services = new Dictionary<Type, object>();

    public static void Register<T>(T service) where T : class
    {
        services[typeof(T)] = service;
    }

    public static T Get<T>() where T : class
    {
        services.TryGetValue(typeof(T), out var service);
        return service as T;
    }
}

// Использование
ServiceLocator.Register<IService>(new MyService());
var service = ServiceLocator.Get<IService>();

Однако стоит помнить, что Service Locator может скрывать зависимости и усложнять тестирование, поэтому в современных проектах чаще предпочитают явное внедрение зависимостей (Dependency Injection).