在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;