![](/img/trans.png)
[英]Android WorkManager Worker can not be injected using Dagger Hilt `@WorkerInject`
[英]Couldn't inject @Binds Hilt Dependencies in WorkManager using @WorkerInject
我嘗試使用以下代碼構建
工人class
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 所說,用 ApplicationComponent 交換 ActivityComponent 並刪除 UseCaseModule class 中的 @ActivityScoped 解決了這個問題。
刀柄模塊
@Module
@InstallIn(ActivityComponent::class)
abstract class UseCaseModule {
@Binds
abstract fun bindStartJobUseCase(startJobUseCaseImpl: StartJobUseCaseImpl): StartJobUseCase
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.