Конструктор, впрыскивающий контейнер в StructureMap - PullRequest
1 голос
/ 09 мая 2019

Допустимо ли вводить контейнер через конструктор? Или это должно быть более гранулированным?

public class Car{
    private readonly IContainer _container;

    public Car(IContainer container){
        this._container = container;
    }

    public string DoSomething(){
        var service1 =_container.GetInstance<IServiceINeed1>();
        service1.DoStuff();

        var service2 =_container.GetInstance<IServiceINeed2>();
        service2.DoThings();
    }
}

Vs.

public class Car{
    private readonly IServiceINeed1 _service1;
    private readonly IServiceINeed2 _service2;

    public Car(IServiceINeed1 service1, IServiceINeed2 service2){
        this._service1 = service1;
        this._service2 = service2;
    }

public string DoSomething(){
        this._service1.DoStuff();
        this._service2.DoThings();
    }
}

Если он недействителен, какова причина этого?

1 Ответ

0 голосов
/ 09 мая 2019

Если вы вводите контейнер, то у вас нет четкого представления о том, от каких зависимостей зависит ваш класс. Я думаю, что это называется Service Locator, и вы можете прочитать здесь почему сервисный локатор является анти-паттерном. Так что лучше, если вы добавляете интерфейсы, от которых зависит ваш класс.

...