Dagger2(初步探索三)

前两篇实现了简单的Dagger2注入,这篇介绍下多层依赖,使用component作为component的依赖,实现多层级的依赖注入。

1.新建一个CClass类,如下

public class CClass {
    public String sex;

    @Inject
    public CClass(String sex){
        this.sex=sex;
    }
    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }
}

2.新建module,如下

@Module
public class MyTwoModule {

    @Provides
    public CClass provideCClass(String sex) {
        return new CClass(sex);
    }

    @Provides
    public String provideString(){
        return "man";
    }

}

3.新建component

@ActivityScope
@Component(dependencies = MyComponent.class,modules = MyTwoModule.class)
public interface MyTwoComponent {
    void inject(MainActivity activity);
}

使用了dependencies的方式依赖了另一个component

4.修改被依赖的component
修改前

@ActivityScope
@Component(modules = MyModule.class)
public interface MyComponent {
    void inject(MainActivity activity);
}

修改后

//@ActivityScope
@Component(modules = MyModule.class)
public interface MyComponent {
    void inject(MainActivity activity);

    /*当它作为depend给其他Component依赖的时候,得暴露下面的对象,不然下面得不到*/
    AClass aClass();
    BClass bClass();
}

注意:如果依赖的component限定了@ActivityScope,则被依赖的一定不能写一样的(否则报错),要在被依赖的component里面暴露出要依赖的对象,否则拿不到。

5.进行注入


    /***************** * 多层依赖 *****************/
    @Inject
    AClass aClass;
    @Inject
    BClass bClass;
    @Inject
    CClass cClass;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        /*多层依赖*/
        MyComponent myComponent = DaggerMyComponent.builder().myModule(new MyModule("小红")).build();
        DaggerMyTwoComponent.builder().myComponent(myComponent).myTwoModule(new MyTwoModule()).build().inject(this);
        Log.e("yan", aClass.getName() + "," + bClass.getName() + "," + cClass.getSex());
    }

打印:小红,B,man

查看源码

你可能感兴趣的:(Dagger2(初步探索三))