使用Dagger将活动绑定到LifecycleOwner

时间:2019-07-14 14:29:32

标签: android dagger-2

我正在创建一个生命周期感知类(将注入到活动中)。它需要两个参数-事件总线和生命周期所有者。 在那种情况下,我可以将活动绑定到生命周期所有者吗?

我了解生命周期的课程:

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。

所以我的问题是:我的方法是正确的还是不可能的,因为活动不支持构造函数注入?

1 个答案:

答案 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 的组件共享范围)