Dagger2 的技巧

上一篇文章初略的实现一个Dagge2Demo 我自己昨完后 有这样一个想法 StudentModule 怎么产生出或者装不同的Pen对象呢 比如我想往StudentModule装入三支笔 分别为 红色的笔 白色的笔 黑色的笔 那该怎么办呢?通过网上查资料 我们只需要在 StudentModule 里 装入这三个对象 然后给每支笔取一个别名 我们使用这支笔的时候 根据它的别名去取就行了

首先是 怎么实现取别名
我们可以编写一个别名类 比如我此处 取名为 PenFiled; 注意此类的类型为 @interface

@Qualifier // 这个标识相当于取别名 注解帮助我们创建依赖的tag
@Retention(RetentionPolicy.RUNTIME) // 运行时注解
public @interface PenFiled { // 通过 penFiled字段定义别名
    String value(); // 别名为String 类型
}

好了 现在我们可以同 PenFiled 来个笔取别名了 来看看我们这么给Pen取别名

@Module // 表明他是一个机器 他能生产创造出 东西来 你想创造的任何东西都可以友它来创造实现 比如此处我要生成出一支红色的笔 生产出的笔 可以提供给学生使用
public class StudentModule {

    // 正常情况下的Pen
    @Provides // 次标注表明 可以提供给外表使用 此处意为 可以提供给学生使用 
    Pen providePen() { // 固定格式 provide + class对象 如此处的Pen 所以变成方法名 providePen
        return new Pen("红色");
    }

    // 定义 不同的 笔 并且取个别名 以便在 使用的地方通过别名来拿 新增加的内容

    // 白色的笔 通过PenFile 给这支笔取了叫 whitePen的别名
    @Provides @PenFiled("whitePen")
    Pen provideWhitePen() {
        return new Pen("白色");
    }

    //黑色的笔 通过PenFile 给这支笔取了叫 blackPen的别名
    @Provides @PenFiled("blackPen")
    Pen provideBlackPen() {
        return new Pen("黑色");
    }
}

这是我的上一篇文章中的 Pen类 后面的两个对象是我新增加的

别名取好接下来就是 怎么通过别名来拿到 不同别名的笔了

public class StudentActivity extends AppCompatActivity {

    @Inject // 通过此 直接拿到机器帮你生产的产品 只要你自己的产品的构造方法标注此注解 并且也在生产机器中注册好了
    Pen pen;

    @Inject @PenFiled("whitePen") // 通过PenFiled 的whitePen 来拿到白色的笔 注意看 StudentModule里的取别名的对照
    Pen wPen;

    @Inject @PenFiled("blackPen") // 通过PenFiled 的blackPen 来拿到白色的笔 注意看 StudentModule里的取别名的对照
    Pen bPen;

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

        // DaggerStudentComponent 其实这才是 真正的组装机 连接到 生产机器 studentModule(new StudentModule()) 再连接到学生 inject(this) this 就是StudentActivity (学生)
        DaggerStudentComponent.builder().studentModule(new StudentModule()).build().inject(this);
        //好了 我们可以直接使用这支笔了 应为这支笔已经有 生成机器生产出来了 默认为红色的 我们toast 一下
        Toast.makeText(StudentActivity.this, pen.getPenColor(), Toast.LENGTH_SHORT).show();
        //接下来就是看你的表演了 定义更多的产品(class 对象) 让生产机器帮你生产(StudentModule 注意格式)

        Log.e("dagger2","对象pen:" + pen.getPenColor() + ",对象 wPen:" + wPen.getPenColor() + ",对象 bPen:" + bPen.getPenColor());
    }
}

看下效果
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值