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

3
我恰好有一个与 Android 生命周期相关的组件,具有以下接口:
class MyLifecycleAwareComponent @Inject constructor(
    private val: DependencyOne,
    private val: DependencyTwo
) {

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

    ...
}

所有Dagger特定的组件和模块都已正确配置,并且目前运行良好。
在每个活动中,当我需要使用该组件时,我会按照以下步骤进行操作:
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的方法来完成这个任务?

1个回答

4
您可以从ActivityModule将您的Activity绑定到LifecycleOwner:
@Module
abstract class ActivityModule {
    ...
    @Binds
    @ActivityScope
    abstract fun bindLifecycleOwner(activity: AppCompatActivity): LifecycleOwner
    ...
}

1
获取Fragment的ViewLifecycleOwner是否也是可能的? - Andrew

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接