Sobes.tech
Junior — Middle

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

sobes.tech AI

Отговор от 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).