Dagger 2注入链式依赖

时间:2015-08-12 21:53:59

标签: java android dagger-2

我很抱歉只能提供伪代码。我在我的一个android项目中使用Dagger 2,并且当遇到链式依赖时我遇到了一些麻烦,例如“A as a B and B has C”,如下所示:

class A {
  @Inject B b;

  void bootstrap() {
    componentA.inject(this);
  }
}

class B {
  @Inject C c;
}

模块和组件我看起来如下:

moduleA {
  provides B; 
  provides C;
}

componentA {
  void inject(A);
}

但是,在运行应用程序时,不会注入C,因此在引用时会给我一个空指针异常。

我的问题是:为什么不注射C?

我试图在B中使用bootstrap方法并将componentA显式注入到B中,如下所示:

class B {
   @Inject C c;

   void bootstrap() {
     componentA.inject(this);
   }
}

它有效,但我感觉不对,因为我期望匕首2为我找出依赖关系,而不是沿着链传递componentA。任何帮助,将不胜感激!

1 个答案:

答案 0 :(得分:0)

如果您不想在链中传递组件A,则必须在提供的类中使用构造函数参数而不是@Inject。

@Module
public class ModuleA {
    @Singleton
    @Provides
    public A a(B b) {
        return new A(b);
    }

    @Singleton
    @Provides
    public B b(C c) {
        return new B(c);
    } 

    @Singleton
    @Provides
    public C c() {
        return new C();
    } 
}