应用场景:多个构造方法想要@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中
生成文件整体思路和之前的都是大同小异
网友评论