小编Ale*_*lex的帖子

我应该注入哪些依赖项?

使用依赖注入时,您注入哪些依赖项?

我以前注入了所有依赖项,但是在执行TDD时发现通常有两种类型的依赖项:

  • 那些是真正的外部依赖,可能会改变,例如ProductRepository
  • 纯粹为了可测试性而存在的那些例如,为了可测试性而提取和注入的类的行为的一部分

一种方法是注入这样的所有依赖项

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框架中配置,从而打破了我听过的"最佳实践".

你会提倡哪种方法?为什么?

dependency-injection

6
推荐指数
1
解决办法
307
查看次数

标签 统计

dependency-injection ×1