如何使用Dagger2在Android中注入生命周期所有者?



我碰巧有一个具有以下界面的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做到这一点?

您可以从 ActivityModule 将 Activity 绑定到 LifecycleOwner:

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

最新更新