Dagger2&嵌套儿童注射

时间:2017-05-02 09:49:28

标签: android dependency-injection dagger-2

我是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”就足够了吗?

1 个答案:

答案 0 :(得分:1)

是的,在该示例中,您必须明确注入B,就像对来自new的调用所做的所有操作一样。匕首不能干扰那个电话。

然而,通过推迟注射,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.
    }
}
寻找你感兴趣的贴纸↓↓↓
豫ICP备18024241号-1