我想让Dagger在我的项目上工作.
但是,在编译期间,我在其中一个类上遇到以下异常:
错误:Foo上没有可注射成员.你想添加一个注射构造函数吗?
但是,该类没有依赖关系,因此使用默认的no-arg构造函数:
public class Foo
{
...
}
Run Code Online (Sandbox Code Playgroud)
我是否真的需要添加一个像下面这样的可注射无参数构造函数?
public class Foo
{
@Inject
public Foo()
{
}
....
}
Run Code Online (Sandbox Code Playgroud)
Chr*_*ber 33
来自文档:
缺少@Inject注释的类不能由Dagger构造.
Dagger主动要求您通过添加no-args构造函数或添加可注入字段将@Inject添加到您的注入类中.第三个选项是从@Provides方法返回类,如下所示:
@Module(...)
class MyModule {
@Provides Foo provideFoo() {
return new Foo(); // Foo is not injectable.
}
}
Run Code Online (Sandbox Code Playgroud)
这似乎是额外的样板,但是从Guice和其他框架的经验来看,随机类的JIT绑定最终会出现错误.我们已经看到java.lang.String注入了东西,并且因为有人忘了绑定它,你最后注入了""而不是所需的字符串.因此,Dagger需要@Inject构造函数或字段.(Guice可选择在4.x中使用它,但为了向后兼容,默认情况下它是关闭的)
这是一个罕见的例子,Dagger以少量冗长的代价选择了更多的正确性保证.
| 归档时间: |
|
| 查看次数: |
4161 次 |
| 最近记录: |