gpt4 book ai didi

dependency-injection - 在方法或构造函数中注入(inject)依赖项?

转载 作者:行者123 更新时间:2023-12-03 12:15:33 24 4
gpt4 key购买 nike

依赖注入(inject)似乎是件好事。一般来说,依赖关系应该注入(inject)到需要它们的方法中,还是应该注入(inject)到类的构造函数中?

请参阅下面的示例以演示注入(inject)相同依赖项的两种方法。

//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
}

}

最佳答案

构造函数注入(inject)的主要好处是它允许将您的字段标记为最终字段。例如:

class Foo {
private final Bar _bar;

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

以下页面列出了优缺点: Guice Best Practices :

方法注入(inject)
  • + 不是现场注入(inject)
  • + 仅适用于一些奇怪的边缘情况

  • 构造函数注入(inject)
  • + 字段可以是最终的!
  • + 注入(inject)不可能被跳过
  • + 依赖关系一目了然
  • + 这就是 build 的理念
  • - 无可选注入(inject)
  • - 当 DI 库不能自己实例化时无用
  • - 子类需要“了解”其父类(super class)所需的注入(inject)
  • - 对于只“关心”其中一个参数的测试不太方便
  • 关于dependency-injection - 在方法或构造函数中注入(inject)依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/213421/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com