如何解决无法使用 @WorkerInject 在 WorkManager 中注入 @Binds Hilt Dependencies
我尝试使用以下代码构建
Followed the Hilt-WorkManager official documentation
工人阶级
class StartJobWorker @WorkerInject constructor(
@Assisted appContext: Context,@Assisted workerParams: WorkerParameters,private val startJobUseCase: StartJobUseCase,) : CoroutineWorker(appContext,workerParams) {
override suspend fun doWork(): Result {
val jobId: Long = inputData.getLong(AppConstant.JOB_ID,0)
return when (val workResult: WorkResult = startJobUseCase(jobId)) {
is WorkResult.Success<*> -> Result.success()
is WorkResult.Failure<*> -> Result.failure()
WorkResult.Retry -> Result.retry()
}
}
}
刀柄模块
@Module
@InstallIn(ActivityComponent::class)
abstract class UseCaseModule {
@ActivityScoped
@Binds
abstract fun bindStartJobUseCase(startJobUseCaseImpl: StartJobUseCaseImpl): StartJobUseCase
}
依赖抽象
interface StartJobUseCase {
suspend operator fun invoke(jobId: Long): WorkResult
}
依赖实现
class StartJobUseCaseImpl @Inject constructor(
private val startJobRepository: StartJobRepository
) : StartJobUseCase {
override suspend fun invoke(jobId: Long): WorkResult {
return startJobRepository.startJob(jobId)
}
}
我在编译时收到以下错误消息。
error: [Dagger/MissingBinding] com.example.domain.StartJobUseCase cannot be provided without an @Provides-annotated method.
请告诉我此问题的解决方案。
解决方法
正如 EpicPandaForce 所说,将 ActivityComponent 与 ApplicationComponent 交换并删除 UseCaseModule 类中的 @ActivityScoped 解决了该问题。
刀柄模块
@Module
@InstallIn(ActivityComponent::class)
abstract class UseCaseModule {
@Binds
abstract fun bindStartJobUseCase(startJobUseCaseImpl: StartJobUseCaseImpl): StartJobUseCase
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。