在StructureMap中的构造函数注入容器

时间:2019-05-09 06:42:08

标签: c# structuremap

通过构造函数注入容器是否有效?还是需要更精细?

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 :(得分:0)

如果您注入Container,那么您对类所依赖的依赖项一无所知。我认为这称为服务定位器,您可以阅读here 为什么服务定位器是反模式。因此,如果您注入类所依赖的接口,那就更好了。