依赖注入 – 方法或构造函数中的注入依赖关系?

依赖注入似乎是一件好事.一般来说,依靠是否需要注入方法,还是将其注入课堂的教唆者?

请参阅下面的示例来演示注入相同依赖关系的两种方式.

//Inject the dependency into the methods that require ImportantClass
Class Something {

    public Something()
    {
         //empty
    }

    public void A() 
    {
         //do something without x
    }

    public void B(ImportantClass x)
    {
         //do something with x
    }

    public void C(ImportantClass x)
    {
         //do something with x
    }
}

//Inject the dependency into the constructor once
Class Something {
    private ImportantClass _x
    public Something(ImportantClass x)
    {
         this._x = x;
    }

    public void A() 
    {
         //do something without x
    }

    public void B()
    {
         //do something with this._x
    }

    public void C()
    {
         //do something with this._x
    }

}
最佳答案
构造器注入的主要优点是它允许您的字段标记为最终.例如:

class Foo {
    private final Bar _bar;

    Foo(Bar bar) {
        _bar=bar;
    }
}

以下页面有一个很好的pro和con的列表:Guice Best Practices

方法注射

>不是现场注射
>只有对某些奇怪的情况有效的东西

构造器注入

>字段可以是最终的!
>注射不可能被跳过
>轻松查看依赖关系一目了然
>这是建设的想法是什么
> – 无可选注射
> – 当DI库无法实现本身时无用
> – 子类需要“知道”他们的超类所需的注入
> – 不太方便测试,只有“关心”其中一个参数

转载注明原文:依赖注入 – 方法或构造函数中的注入依赖关系? - 代码日志