首页 > 解决方案 > 使用 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 依赖项

  1. 工人阶级 使用 @HiltWorker 和 @AssistedInject

  2. 依赖项

在此处输入图像描述

为了解决这个问题,已经看到并实施了各种 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)
    }
}

标签: androidkotlinandroid-workmanagerdagger-hilt

解决方案


该错误表明您正在尝试@Provides使用构造函数创建一个类@AssistedInject。这是有道理的:毕竟,没有办法WorkerParameters在单例上下文中获得正确的实例。

幸运的是,WorkerModule也完全没有必要,因为HiltWorkerFactory已经知道如何创建任何@HiltWorker带注释的类。只需删除模块,然后按照教程确保HiltWorkerFactory安装在WorkManager.


推荐阅读