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.
}
}
我是 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.
}
}