Dagger2 和嵌套子注入

Dagger2 & nested child injections

我是 Dagger2 的新手。假设我有以下结构:

public class A extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
         DependencyInjector.applicationComponent.inject(this);
    }
    ...

    public void foo() {
        B b = new B();
        **DependencyInjector.applicationComponent.inject(b);**
    }
}

public class B {
    @Inject
    C c;
}

我的问题是,我是否必须显式注入 "b",尽管 "A" 已经注入?!还是注入"A"就够了?

是的,在那个例子中,你必须显式地注入 B,就像你对来自对 new 的调用所做的一切一样。 Dagger 无法干扰该调用。

但是,通过推迟 Dagger 创建的注入 Provider,您可以利用 A 的注入,这样您就不必注入 B:

public class A extends Activity {
    @Inject Provider<B> bProvider;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
         DependencyInjector.applicationComponent.inject(this);
    }
    ...

    public void foo() {
        B b = bProvider.get();  // This instance will be fully injected.
    }
}