3.Dagger2创建和区分不同的实例

来源:互联网 发布:淘宝2016春秋连衣裙 编辑:程序博客网 时间:2024/06/11 18:29

在Dagger2中我们通过Moudule中的provide方法(即通过@Provides注解的获取对象实例的方法)获得实例,是根据返回的对象类型进行获取的,有时我们需要获取一个类的多个实例,该如何实现呢?下面开始多个实例的实现。

1.通过@Named(“name”)方式进行区分

@Modulepublic class PModule {    private static final String TAG = "PModule";    @Named("li")    @Provides    public Person provideLi() {        Person li = new Person();        Log.e(TAG, "provideLi: "+li);        return li;    }    @Named("wang")    @Provides    public Person provideWang() {        Person wang = new Person();        Log.e(TAG, "provideWang: "+wang);        return wang;    }}-------------------------------------------------------------------   //实例化时    @Named("li")    @Inject    Person li;    @Named("wang")    @Inject    Person wang;

2.通过自定义注解(Anotation)的方式

@Qualifier:其作用是用来区分不同对象的实例,@Named其实就是@Qualifier的一种实现。

@Qualifier@Documented@Retention(RUNTIME)public @interface Wang {}@Qualifier@Documented@Retention(RUNTIME)public @interface Li {}//然后@Modulepublic class PModule {    private static final String TAG = "PModule";    @Li    @Provides    public Person provideLi() {        Person li = new Person();        Log.e(TAG, "provideLi: "+li);        return li;    }    @Wang    @Provides    public Person provideWang() {        Person wang = new Person();        Log.e(TAG, "provideWang: "+wang);        return wang;    }}-------------------------------------------------------------------   //实例化时    @Li    @Inject    Person li;    @Wang    @Inject    Person wang;