代码之家  ›  专栏  ›  技术社区  ›  Archibald

如何使用Dagger2在Android中注入LifecycleOwner?

  •  0
  • Archibald  · 技术社区  · 6 年前

    我碰巧有一个Android生命周期感知组件,具有以下界面:

    class MyLifecycleAwareComponent @Inject constructor(
        private val: DependencyOne,
        private val: DependencyTwo
    ) {
    
        fun bindToLifecycleOwner(lifecycleOwner: LifecycleOwner) {
            ...
        }
    
        ...
    }
    

    在每个活动中,当我需要使用组件时,我会执行以下操作:

    class MyActivity: AppCompatActivity() {
        @Inject
        lateinit var component: MyLifecycleAwareComponent
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            component.bindToLifecycleOwner(this)
            ...
        }
    }
    

    现在我想摆脱 bindLifecycleOwner

    class MyLifecycleAwareComponent @Inject constructor(
        private val: DependencyOne,
        private val: DependencyTwo,
        private val: LifecycleOwner
    ) {
        ...
    }
    

    并提供 lifecycleOwner AppCompatActivity ).

    1 回复  |  直到 6 年前
        1
  •  2
  •   Samuel Eminet    6 年前

    您可以从ActivityModule将活动绑定到LifecycleOwner:

    @Module
    abstract class ActivityModule {
        ...
        @Binds
        @ActivityScope
        abstract fun bindLifecycleOwner(activity: AppCompatActivity): LifecycleOwner
        ...
    }