如何使用 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
...
}
我碰巧有一个 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
...
}