gpt4 book ai didi

默认构造函数上的 Dagger

转载 作者:行者123 更新时间:2023-12-03 10:01:01 25 4
gpt4 key购买 nike

我正在尝试获取 Dagger开始我的项目。

但是,在编译过程中,我的一个类出现以下异常:

error: No injectable members on Foo. Do you want to add an injectable constructor?



但是,该类没有依赖项,因此使用默认的无参数构造函数:
public class Foo
{
...
}

我真的需要像下面这样添加一个可注入(inject)的无参数构造函数吗?
public class Foo
{
@Inject
public Foo()
{
}

....
}

最佳答案

来自 docs :

Classes that lack @Inject annotations cannot be constructed by Dagger.



Dagger 主动要求您通过添加无参数构造函数或添加可注入(inject)字段来将 @Inject 添加到可注入(inject)类中。第三种选择是从 @Provides 方法返回类,如下所示:
@Module(...)
class MyModule {
@Provides Foo provideFoo() {
return new Foo(); // Foo is not injectable.
}
}

这似乎是额外的样板,但根据 Guice 和其他框架的经验,随机类的 JIT 绑定(bind)结果是错误的。我们已经看到 java.lang.String 被注入(inject)到事物中,并且因为有人忘记绑定(bind)它,你最终注入(inject)了 ""而不是所需的字符串。因此,Dagger 需要一个 @Inject 构造函数或字段。(Guice 在 4.x 中可以选择使用它,但为了向后兼容,默认情况下它是关闭的)

这是 Dagger 以少量冗长为代价选择更多正确性保证的罕见实例。

关于默认构造函数上的 Dagger ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18337116/

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