android - 将 dao 注入(inject) Worker 的 Hilt 问题

标签 android dependency-injection android-workmanager dagger-hilt

我在我的 App 类中启动了一个 worker ,如下所示;

@HiltAndroidApp
class KutuphanemApplication:Application(),Configuration.Provider {

@Inject
lateinit var workerFactory: HiltWorkerFactory

override fun getWorkManagerConfiguration() =
    Configuration.Builder()
        .setMinimumLoggingLevel(android.util.Log.DEBUG)
        .setWorkerFactory(workerFactory)
        .build()
我想将一个单例 dao 注入(inject)我的 worker 类以更新数据库中的某些内容。所以我像下面这样注入(inject) dao;
 @HiltWorker
 class ClearImageNotInArchiveWorker @AssistedInject constructor(
      @Assisted val appContext: Context,
      @Assisted val workerParams: WorkerParameters,
      private val kitapDao: KitapDao): CoroutineWorker(appContext, workerParams) {

override suspend fun doWork(): Result {...}
}
当我在 App 类中加入这个 WorkManager 类时,我得到了
WorkerFactory:无法实例化 com.mesutemre.kutuphanem.job.ClearImageNotInArchiveWorker
错误。但应用程序没有崩溃。在这里注入(inject)dao有什么问题吗?
也是我的单例道;
@Singleton
@Provides
fun provideKitapDao(database: KutuphanemDatabase) = database.getKitapDao();

最佳答案

我解决了这个问题。我搞砸了 hilt-compiler kapts。我已经添加了

  kapt("androidx.hilt:hilt-compiler:1.0.0")
进入 gradle 然后我添加了
<provider
   android:name="androidx.startup.InitializationProvider"
   android:authorities="${applicationId}.androidx-startup"
   tools:node="remove">
</provider>
进入 AndroidManifest.xml 。然后问题就解决了。

关于android - 将 dao 注入(inject) Worker 的 Hilt 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70682091/

相关文章:

android - 使用 onResume() 重新渲染 View

android - 分页库 : How to reload portion of data on demand?

android - 如何使用 Retrofit 将包含图像的类从 Android 发送到 Java Restful Web 服务器

android - AlertDialog 中的密码字段

android - ListenableWorker 示例中的 Callback 对象来自哪里?

android - WorkManager 的 OneTimeWorkRequest 的重试策略/机制是什么

angular - @Self 和 @Host Angular 2+ 依赖注入(inject)装饰器之间的区别

c# - 确定 Neo4j 驱动程序和 session 对象的范围

c# - SQLDependency with DI

java - 达到 JobScheduler 限制 100 后,WorkManager 对作业做了什么?