如何使用Hilt在存储库中注入应用程序上下文?

时间:2020-07-24 11:47:30

标签: android dependency-injection dagger-hilt

我想将应用程序上下文注入到存储库类中,以在存储库内创建一个会议室数据库实例。我正在使用Hilt进行依赖项注入。

我们可以使用hilt传递应用程序上下文,还是必须手动传递它?

我遇到以下错误:

[Dagger/MissingBinding] android.content.Context cannot be provided without an
@Provides-annotated method. public abstract static class ApplicationC 
implements ExartApplication_GeneratedInjector

Context Error

1 个答案:

答案 0 :(得分:22)

只需在上下文参数上使用@ApplicationContext注释。

通过用@ApplicationContext注释上下文 不用了,我们不需要为应用程序上下文创建提供程序。

import dagger.hilt.android.qualifiers.ApplicationContext

@Module
@InstallIn(ApplicationComponent::class)
class ProductionModule {

    @Singleton
    @Provides
    fun provideAppDatabase(@ApplicationContext appContext: Context): AppDatabase {
        return Room
            .databaseBuilder(appContext, AppDatabase::class.java, AppDatabase.DB_NAME)
            .build()
    }
}

注意:如果您很想通过活动上下文作为依赖项,请尝试使用应用程序上下文或重新考虑您的用例。通过活动上下文可能会导致严重的隐患,例如内存泄漏。