我正在尝试让Dagger开始我的项目。
但是,在编译过程中,我的一个类出现以下异常:
错误:Foo 上没有可注入成员。你想添加一个可注入的构造函数吗?
但是,该类没有依赖项,因此使用默认的无参数构造函数:
public class Foo
{
...
}
我真的需要像下面这样添加一个可注入的无参数构造函数吗?
public class Foo
{
@Inject
public Foo()
{
}
....
}
从文档:
Dagger 无法构造缺少 @Inject 注解的类。
Dagger 主动要求您通过添加无参数构造函数或添加可注入字段来将 @Inject 添加到可注入类中。第三种选择是从 @Provides 方法返回类,如下所示:
@Module(...)
class MyModule {
@Provides Foo provideFoo() {
return new Foo(); // Foo is not injectable.
}
}
这似乎是额外的样板,但根据 Guice 和其他框架的经验,随机类的 JIT 绑定结果是错误的。我们已经看到 java.lang.String 被注入到事物中,并且因为有人忘记绑定它,你最终注入了 "" 而不是所需的字符串。因此,Dagger 需要一个 @Inject 构造函数或字段。(Guice 在 4.x 中可选地有这个,但为了向后兼容,默认情况下它是关闭的)
这是 Dagger 以少量冗长为代价选择更多正确性保证的罕见例子。