Dagger2使用与分析(6)---@Qualifier 和@N
应用场景:多个构造方法想要@Inject、多个@Provides方法返回同一数据类型,这种情况该如何注入?
一、通过@Qualifier来实现
1.首先自定义注解

依赖类

自定义module

自定义Component
//指定模型
@Component(modules = SellMoeModule.class)
public interface SellMoeComponent {
void inject(MainActivity mainActivity);
}
使用:

注意:此处要在module和目标类中添加自定义的 @Qualifier注解
二、通过@Name来实现
还是原来的套路,我们先看一下依赖类:

再来看一下自定义Module

自定义component

使用:

注意:1.需要在自定义module和注入的目标类中使用@Name注解
2.如何是区分两个构造函数,需要在两个相关的moudle和目标类中都需要标注@Name 如果只是标注一个,编译会报错
分析:
DaggerSellMoeComponent--->inject--->injectMainActivity(mainActivity)

以其中一个为例子:
如MainActivity_MembersInjector.injectMSellMoe(instance, getNamedSellMoe());
-------->getNamedSellMoe()------->
private SellMoegetNamedSellMoe() {
return SellMoeModule_SellMoeProviderFactory.sellMoeProvider(
sellMoeModule, sellMoeModule.ageProvider());
}
------------>进入SellMoeModule_SellMoeProviderFactory中查看sellMoeProvider

最终在get()方法中调用这个SellMoeProvider。同第一篇文章我们分析的一样,这个get,会在MainActivity_MembersInjector中

整体思路和之前的都是大同小异