使用依赖注入时,您注入哪些依赖项?
我以前注入了所有依赖项,但是在执行TDD时发现通常有两种类型的依赖项:
一种方法是注入这样的所有依赖项
public ClassWithExternalDependency(IExternalDependency external,
IExtractedForTestabilityDependency internal)
{
// assign dependencies ...
}
Run Code Online (Sandbox Code Playgroud)
但我发现这可能会导致DI注册表中的依赖性膨胀.
另一种方法是隐藏像这样的"可测试性依赖"
public ClassWithExternalDependency(IExternalDependency external)
: this (external, new ConcreteClassOfInternalDependency())
{}
internal ClassWithExternalDependency(IExternalDependency external,
IExtractedForTestabilityDependency internal)
{
// assign dependencies ...
}
Run Code Online (Sandbox Code Playgroud)
这是更多的努力,但似乎更有意义.缺点不是所有对象都在DI框架中配置,从而打破了我听过的"最佳实践".
你会提倡哪种方法?为什么?