Dagger 2 - 缺少构造函数注入示例

时间:2016-11-12 11:38:49

标签: dependency-injection dagger-2

我花了几个小时进行搜索,但我仍然没有找到任何有关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;
    }
}

1 个答案:

答案 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);
    }
}