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

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

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

@Module
public 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 {
}
//然后
@Module
public 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;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容