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):