Dagger2使用与分析(6)---@Qualifier 和@Name

应用场景:多个构造方法想要@Inject、多个@Provides方法返回同一数据类型,这种情况该如何注入?

一、通过@Qualifier来实现

1.首先自定义注解


自定义注解

依赖类


实体类

自定义module


module

自定义Component

//指定模型

@Component(modules = SellMoeModule.class)

public interface SellMoeComponent {

void inject(MainActivity mainActivity);

}

使用:

使用

注意:此处要在module和目标类中添加自定义的  @Qualifier注解

二、通过@Name来实现

还是原来的套路,我们先看一下依赖类:

多构造函数

再来看一下自定义Module

自定义moudle

自定义component

自定义Component

使用:


使用

注意:1.需要在自定义module和注入的目标类中使用@Name注解

2.如何是区分两个构造函数,需要在两个相关的moudle和目标类中都需要标注@Name 如果只是标注一个,编译会报错

分析:

DaggerSellMoeComponent--->inject--->injectMainActivity(mainActivity)

生成文件005

以其中一个为例子:

如MainActivity_MembersInjector.injectMSellMoe(instance, getNamedSellMoe());

-------->getNamedSellMoe()------->

private SellMoegetNamedSellMoe() {

return SellMoeModule_SellMoeProviderFactory.sellMoeProvider(

sellMoeModule, sellMoeModule.ageProvider());

}


------------>进入SellMoeModule_SellMoeProviderFactory中查看sellMoeProvider


生成文件006

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

生成文件

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

你可能感兴趣的:(Dagger2使用与分析(6)---@Qualifier 和@Name)