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