android - 如何使用 Hilt 在存储库中注入应用程序上下文?
问题描述
我想将应用程序上下文注入到存储库类中,以在存储库中创建房间数据库实例。我正在使用 Hilt 进行依赖注入。
我们可以使用 hilt 来传递应用程序上下文还是我必须手动传递它?
我收到以下错误:
[Dagger/MissingBinding] android.content.Context cannot be provided without an
@Provides-annotated method. public abstract static class ApplicationC
implements ExartApplication_GeneratedInjector
解决方案
只需@ApplicationContext
在您的上下文参数上使用注释。
通过使用 Hilt 提供的注释上下文
@ApplicationContext
,我们不需要为应用程序上下文创建提供程序。
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()
}
}
注意:如果您想将活动上下文作为依赖项传递,请尝试使用应用程序上下文或重新考虑您的用例。传递活动上下文可能会导致严重的影响,例如内存泄漏。话虽如此,如果您知道自己在做什么,请使用@ActivityContext
注释来传递活动上下文。一个可能的用例可能是适配器。
推荐阅读
- typescript - haskell 等效于 typescript 映射函数
- reactjs - How to show the article details , i m facing problem
- r - rootsolve::multiroot 函数对角元素为零问题
- shell - 我需要在 shell 中用换行符替换文字 \n
- git - 我将如何 git 合并两个具有原始祖先但分歧的相同项目?
- c# - 仍然没有得到如何从 BackgroundWorker 返回值
- html - 我在 bootstrap 列中遇到 img 缩放问题
- node.js - 猫鼬删除错误的文件
- java - 遍历 HashMap 并将值放入 List
- javascript - 异步减少