两个 Component 之间除了 dependencies 依赖方式以外,还可以使用 Subcomponent 方式。比如说 SeeComponent 想要依赖 AnimalComponent,我们可以这样操作:
第一步,在 SeeComponent 中使用@Subcomponent
注解:
1 |
|
第二步,在 AnimalComponent 中定义返回值类型为 SeeComponent 的方法:
1 |
|
第三步,初始化并使用:
1 | class SeeActivity : FragmentActivity() { |
animalComponent 调用 getSeeComponent() 得到 SeeComponent 实例,然后就可以 inject 到 SeeActivity 中。Subcomponent完全继承 Component 中的全部依赖。
和 dependencies 的区别:
- 被依赖的 Component 不需要显示声明 Module 中对应的 provideXXX() 方法
- 初始化的时候不需要使用 DaggerXXXComponent 创建被依赖的 Component 对象
dependencies
:被依赖的 Component 有 Scope 修饰时,依赖方必须使用 Scope 且不可与前者的 Scope 相同;Subcomponent
:被依赖的 Component 有 Scope 修饰时,依赖方可以不使用 Scope,也可以使用 Scope 但不能与前者的 Scope 相同;- 相同点是:被依赖的 Component 没有 Scope 修饰时,依赖方是否使用 Scope 没有要求。
最后
项目源码
其他几篇的链接:
Dagger2 中的 Qualifier
Dagger2 中的 Scope、dependencies
Dagger2 中使用 AndroidInjection 优化注入流程
Dagger2 中的 Binds、IntoSet、IntoMap