Dagger 2 - Lack of Constructor Injection example

☆樱花仙子☆ 提交于 2019-12-22 12:32:13

问题


I spend several hours for searching but I still don't find any clearly example about Constructor Injection with Dagger 2.

Assume I have below declaration, how can I create an instance of class B somewhere using Dagger 2 injection?

@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:


If you have

@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;
    }
}

Then you'll need

/*unscoped*/
@Component(modules={ModuleA.class})
public interface MyComponent {
    ClassA classA();
    ClassB classB();
}

And then you can either access like so

MyComponent component = DaggerMyComponent.create();
ClassB classB = component.classB();

Or

/*unscoped*/
@Component(modules={ModuleA.class})
public interface MyComponent {
    ClassA classA();
    ClassB classB();

    void inject(MyClass myClass);
}

And

public class MyClass {
    @Inject
    ClassB classB;

    public void init() {
        MyComponent component = getComponent();
        component.inject(this);
    }
}


来源:https://stackoverflow.com/questions/40562481/dagger-2-lack-of-constructor-injection-example

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!