我花了几个小时进行搜索,但我仍然没有找到任何有关Dagger 2的Constructor Injection的明显示例。
假设我有以下声明,如何使用Dagger 2注入在某处创建B类实例?
@Module
public class ClassA {
@Provides public ClassA provideA(){
return new ClassA();
}
}
public class ClassB{
private ClassA a;
@Inject public ClassB(ClassA a){
this.a = a;
}
}
答案 0 :(得分:3)
如果你有
@Module
public class ModuleA {
/*unscoped*/ @Provides public ClassA provideA(){
return new ClassA();
}
}
/*unscoped*/
public class ClassB{
private ClassA a;
@Inject public ClassB(ClassA a){
this.a = a;
}
}
然后你需要
/*unscoped*/
@Component(modules={ModuleA.class})
public interface MyComponent {
ClassA classA();
ClassB classB();
}
然后你可以这样访问
MyComponent component = DaggerMyComponent.create();
ClassB classB = component.classB();
或者
/*unscoped*/
@Component(modules={ModuleA.class})
public interface MyComponent {
ClassA classA();
ClassB classB();
void inject(MyClass myClass);
}
和
public class MyClass {
@Inject
ClassB classB;
public void init() {
MyComponent component = getComponent();
component.inject(this);
}
}