使用 Dagger 将 Activity 绑定到 LifecycleOwner
Binding Activity to the LifecycleOwner with Dagger
我正在创建生命周期感知 class(将被注入 activity)。它需要两个参数——事件总线和生命周期所有者。
在那种情况下,我可以将 activity 绑定到生命周期所有者吗?
我的生命周期意识class:
class Bus @Inject constructor(
private val eventBus: EventBus,
private val lifecycleOwner: LifecycleOwner) : LifecycleObserver { ... }
我模块中的绑定:
@Binds
abstract fun bindLifecycle(activity: SampleActivity): LifecycleOwner
然后我像往常一样在 ActivityX 中注入总线:
@Inject
lateinit var bus: Bus
我收到以下错误:
如果没有 @Inject 构造函数或 @Provides 注释方法,则无法提供 ActivityX。
所以我的问题是:我的方法是正确的还是不可能的,因为活动不支持构造函数注入?
@Binds
注释 "ties" 已经由 Dagger
提供 给其他类型的依赖。
通过使用:
@Inject
lateinit var bus: Bus
你没有让 SampleActivity
成为 Dagger 依赖项(因此 不是 由 Dagger
提供)。它仅 使用 由 Dagger
提供的依赖项,因此不能与 @Binds
注释一起使用。
您应该有一个 ActivityModule
可以将 LifecycleOwner
公开为依赖项:
@Module
class ActivityModule(private val activity: AppCompatActivity) {
@Provides
fun provideLifecycleOwner(): LifecycleOwner {
return activity
}
}
(请记住,将使用 LifecycleOwner
的 class 必须与使用 ActivityModule
的组件共享作用域)
我正在创建生命周期感知 class(将被注入 activity)。它需要两个参数——事件总线和生命周期所有者。 在那种情况下,我可以将 activity 绑定到生命周期所有者吗?
我的生命周期意识class:
class Bus @Inject constructor(
private val eventBus: EventBus,
private val lifecycleOwner: LifecycleOwner) : LifecycleObserver { ... }
我模块中的绑定:
@Binds
abstract fun bindLifecycle(activity: SampleActivity): LifecycleOwner
然后我像往常一样在 ActivityX 中注入总线:
@Inject
lateinit var bus: Bus
我收到以下错误: 如果没有 @Inject 构造函数或 @Provides 注释方法,则无法提供 ActivityX。
所以我的问题是:我的方法是正确的还是不可能的,因为活动不支持构造函数注入?
@Binds
注释 "ties" 已经由 Dagger
提供 给其他类型的依赖。
通过使用:
@Inject
lateinit var bus: Bus
你没有让 SampleActivity
成为 Dagger 依赖项(因此 不是 由 Dagger
提供)。它仅 使用 由 Dagger
提供的依赖项,因此不能与 @Binds
注释一起使用。
您应该有一个 ActivityModule
可以将 LifecycleOwner
公开为依赖项:
@Module
class ActivityModule(private val activity: AppCompatActivity) {
@Provides
fun provideLifecycleOwner(): LifecycleOwner {
return activity
}
}
(请记住,将使用 LifecycleOwner
的 class 必须与使用 ActivityModule
的组件共享作用域)