如果我有10个需要注入的依赖项,而不想在构造函数中有10个参数,那么我应该使用哪种注入模式?
我应该使用setter方法注入吗?
或者属性注入?
根据Ninject维基,仅编写像上面那样的属性被认为是不良实践,但它与上述setter方法注入不是一样的吗?只是代码更少吗?
哪种模式在这种情况下最有意义?
public class SomeClass
{
private IDependency1 _dependency1;
private IDependency2 _dependency2;
private IDependency3 _dependency3;
//...
}
我应该使用setter方法注入吗?
public class SomeClass
{
private IDependency1 _dependency1;
private IDependency2 _dependency2;
private IDependency3 _dependency3;
//...
[Inject]
public void SetDependency1(IDependency1 dependency1)
{
_dependency1 = dependency1;
}
//...
}
或者属性注入?
public class SomeClass
{
[Inject]
public IDependency1 Dependency1 { private get; set; }
[Inject]
public IDependency2 Dependency2 { private get; set; }
[Inject]
public IDependency3 Dependency3 { private get; set; }
//...
}
根据Ninject维基,仅编写像上面那样的属性被认为是不良实践,但它与上述setter方法注入不是一样的吗?只是代码更少吗?
哪种模式在这种情况下最有意义?
IRepository<T>
实现注入到服务中时。在这种情况下,您缺少一个IUnitOfWork
抽象层。@RubenBartelink,我认为这就是您所说的“成群结队旅行”的意思。如果我误解了,请纠正我。 - StevenFrob
和Gob
和Sob
,但有一段代码从Gob
获取了一些东西并传递给了Sob
,那么很可能缺少1、2或3个依赖关系涉及的抽象。这不是一个自动的过程——你要将其视为一种"味道",然后在你的代码库中寻找使用模式的共性。 - Ruben Bartelink