C# 构造函数在StructureMap中注入容器

C# 构造函数在StructureMap中注入容器,c#,structuremap,C#,Structuremap,通过构造函数注入容器是否有效?还是需要更细粒度 public class Car{ private readonly IContainer _container; public Car(IContainer container){ this._container = container; } public string DoSomething(){ var service1 =_container.GetInstance<

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

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();
    }
}

如果它是无效的,那么背后的原因是什么?

如果您注入容器,那么您就不清楚您的类依赖于什么。我想这叫做服务定位器,你可以阅读
为什么服务定位器是反模式的。所以,如果您注入类所依赖的接口就更好了。

如果您注入容器,那么您就不清楚类所依赖的依赖关系。我想这叫做服务定位器,你可以阅读
为什么服务定位器是反模式的。因此,最好是注入类所依赖的接口。

我看不出问题出在哪里。在接口中定义一些行为。在中注入实现,然后在需要它们的服务中使用它们。这里有多个问题。若car表示数据实体和数据实体,那个么它不应该有任何依赖关系。另外,不应该注入容器,容器应该解析其他类的依赖关系。我没有太注意类名。比如说,它被称为SpecialService。另外,禁止容器注入背后的原因是什么?我看不出问题是什么。您在接口中定义了一些行为。您在中注入实现,然后在需要它们的服务中使用它们。这里有多个问题。若car表示数据实体和数据实体,那个么它不应该有任何依赖关系。另外,不应该注入容器,容器应该解析其他类的依赖关系。我没有太注意类名。比如说,它被称为SpecialService。还有,禁止容器注射的原因是什么?
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();
    }
}