android - 使用 Hilt 注入 WorkManager 但出现错误“Dagger 不支持提供 @AssistedInject 类型。”
问题描述
While injecting WorkManager using HILT, compiler throwing below error
“Dagger 不支持提供 @AssistedInject 类型”
已遵循以下链接中提到的所有步骤
https://developer.android.com/training/dependency-injection/hilt-jetpack
HILT 和 Worker 的 PFB 编码片段和 build.gradle 依赖项
为了解决这个问题,已经看到并实施了各种 SO 帖子,但没有运气。
然而,如果我没有同时使用 @HiltWorker 和 @AssistedInject 并从对象构造函数中删除其他依赖项,则代码编译并成功运行,但所需依赖项的字段注入将不起作用。
因此不确定是它的库问题还是一些实现问题。
并感谢您的支持和提前回答!
编辑:( 添加 WorkerModule.kt 代码)
@Module
@InstallIn(SingletonComponent::class)
object WorkerModule {
@Singleton
@Provides
fun provideWorkerModule(context: Context,
workerParameters: WorkerParameters
// appNetworkService: AppNetworkService,
// appDatabaseService: AppDatabaseService
): PaymentTrackerWorker {
// return PaymentTrackerWorker(context, workerParameters,appNetworkService,appDatabaseService)
return PaymentTrackerWorker(context, workerParameters)
}
}
解决方案
该错误表明您正在尝试@Provides
使用构造函数创建一个类@AssistedInject
。这是有道理的:毕竟,没有办法WorkerParameters
在单例上下文中获得正确的实例。
幸运的是,WorkerModule
也完全没有必要,因为HiltWorkerFactory
已经知道如何创建任何@HiltWorker
带注释的类。只需删除模块,然后按照教程确保HiltWorkerFactory
安装在WorkManager
.
推荐阅读
- excel - Excel 宏,用于选择具有数据和格式的单元格作为表格
- opendaylight - 如何访问 OpenDaylight Northbound REST API
- javascript - 标签和单选按钮的Vue js表单绑定
- azure - azure 数据工厂:迭代数百万个文件
- python - 形状对 GPU 上 tensorflow 内存分配的影响
- javascript - 嵌入在 html 中的 javascript 未在 wkwebview 中运行
- php - 为什么我不能写入 /dev/stdout,但 php://stdout 有效?
- php - 如果在函数内部,PHP openssl_encrypt 和 openssl_decrypt aes-256-gcm 不起作用
- csv - SSIS 平面文件在列中添加尾随空格
- javascript - 如何在 bootstrap-vue 的“b-table”组件中使用插槽“bottom-row”?