使用 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 的组件共享作用域)