我正在创建一个生命周期感知类(将注入到活动中)。它需要两个参数-事件总线和生命周期所有者。 在那种情况下,我可以将活动绑定到生命周期所有者吗?
我了解生命周期的课程:
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。
所以我的问题是:我的方法是正确的还是不可能的,因为活动不支持构造函数注入?
答案 0 :(得分:0)
@Binds
注释将Dagger
已已提供的某种依赖关系“绑定”到其他类型。
使用:
@Inject
lateinit var bus: Bus
您没有使SampleActivity
成为Dagger依赖项(因此Dagger
提供的 not )。它只能使用Dagger
提供的依赖项,因此不能与@Binds
注释一起使用。
您应该有一个ActivityModule
,可以将LifecycleOwner
公开为依赖项:
@Module
class ActivityModule(private val activity: AppCompatActivity) {
@Provides
fun provideLifecycleOwner(): LifecycleOwner {
return activity
}
}
(请记住将使用LifecycleOwner
的类必须与使用ActivityModule
的组件共享范围)