美文网首页
Dagger2 中的 SubComponent

Dagger2 中的 SubComponent

作者: 曹仁不会飞 | 来源:发表于2018-11-20 16:03 被阅读0次

    两个 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 对象

    相关文章

      网友评论

          本文标题:Dagger2 中的 SubComponent

          本文链接:https://www.haomeiwen.com/subject/rcjxqqtx.html