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

查看源码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值