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

How to inject a LifecycleOwner in Android using Dagger2?

我碰巧有一个 Android 具有以下接口的生命周期感知组件:

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

    fun bindToLifecycleOwner(lifecycleOwner: LifecycleOwner) {
        ...
    }

    ...
}

所有 Dagger 特定组件和模块均已正确配置并且到目前为止运行良好。

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

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实现接口)。

有没有办法用 Dagger 做到这一点?

您可以将您的 Activity 从您的 Activity 模块绑定到 LifecycleOwner:

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