我正在尝试让Dagger在我的项目上工作。

但是,在编译过程中,我的其中一个类收到以下异常:



但是,该类没有依赖关系,因此使用默认的no-arg构造函数:

public class Foo
{
    ...
}

我真的必须添加如下所示的可注入(inject)的无参数构造函数吗?
public class Foo
{
     @Inject
     public Foo()
     {
     }

     ....
}

最佳答案

docs:



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 - 默认构造函数上的 Dagger ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18337116/

10-12 05:49