Dagger2 中的 SubComponent

两个 Component 之间除了 dependencies 依赖方式以外,还可以使用 Subcomponent 方式。比如说 SeeComponent 想要依赖 AnimalComponent,我们可以这样操作:

第一步,在 SeeComponent 中使用@Subcomponent注解:
@Subcomponent
interface SeeComponent {
    fun inject(firstActivity: SeeActivity)
}
第二步,在 AnimalComponent 中定义返回值类型为 SeeComponent 的方法:
@ZhuangBiScope
@Component(dependencies = [(BComponent::class)], modules = [(AppModule::class), (AnimalModule::class)])
interface AnimalComponent {
    fun inject(secondActivity: SecondActivity)
    fun getSeeComponent(): SeeComponent
}
第三步,初始化并使用:
class SeeActivity : FragmentActivity() {
    @Inject
    lateinit var sharedPreferences: SharedPreferences
    @Inject
    lateinit var stu: Student

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        (application as DaggerApplication).animalComponent?.getSeeComponent()?.inject(this)
        Log.e("abc", "---> $sharedPreferences")
        Log.e("abc", "---> $stu")
    }
}

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


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值