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

How to inject application context in a repository with Hilt?

我想将应用程序上下文注入存储库 class 以在存储库中创建房间数据库实例。我正在使用 Hilt 进行依赖注入。

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

我收到以下错误:

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

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

By annotating context with @ApplicationContext provided by Hilt, we don't need to create a provider for the application context.

import dagger.hilt.android.qualifiers.ApplicationContext

/* For hilt versions lower than v2.28.2 use ApplicationComponent instead of
SingletonComponent. ApplicationComponent is deprecated and even removed in 
some versions above v2.28.2 so better refactor it to SingletonComponent. */


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

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

注意:如果您想要将 activity 上下文作为依赖项传递,请尝试使用应用程序上下文或重新考虑您的用例。传递 activity 上下文可能会导致内存泄漏等严重问题。话虽如此,如果您知道自己在做什么,请使用 @ActivityContext 注释来传递 activity 上下文。一个可能的用例可能是适配器。