Храните контейнер для инъекций Unity Dependency без сервисного локатора - PullRequest
0 голосов
/ 31 января 2020

У меня есть приложение, которое имеет много внешних зависимостей от аппаратных систем. Я хочу провести модульное тестирование сервисов, которые взаимодействуют с этими аппаратными системами, поэтому я абстрагирую внешнюю часть каждого сервиса, чтобы я мог заменить его на Mock в модульном тесте. В модульном тесте я внедряю внешние зависимости в конструктор сервиса.

В моем производственном коде у меня есть центральное место для регистрации всех внешних зависимостей. Примерно так:

public class DependencyContainer : UnityContainer
{
    private static DependencyContainer instance;
    public static DependencyContainer Instance
    {
        get
        {
            if (instance == null)
                instance = new DependencyContainer();
            return instance;
        }
    }
    private DependencyContainer() : base()
    {
        RegisterTypes();
    }

    private void RegisterTypes()
    {
        this.RegisterSingleton<IExternalService1, ExternalService1>();
        this.RegisterSingleton<IExternalService2, ExternalService2>();
        this.RegisterSingleton<IExternalService3, ExternalService3>();
    }
}

Это просто замаскированный анти-паттерн Service Locator или это разумный способ зарегистрировать мои зависимости?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...