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;

你可能感兴趣的:(3.创建和区分不同的实例)