向 Worker 注入 dao 存在 Hilt 问题

emr*_*rka 7 android dependency-injection android-workmanager dagger-hilt

我在我的应用程序类中启动了一个工作人员,如下所示;

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

@Inject
lateinit var workerFactory: HiltWorkerFactory

override fun getWorkManagerConfiguration() =
    Configuration.Builder()
        .setMinimumLoggingLevel(android.util.Log.DEBUG)
        .setWorkerFactory(workerFactory)
        .build()
Run Code Online (Sandbox Code Playgroud)

我想将单例 dao 注入到我的工作类中以更新数据库中的某些内容。所以我像下面一样注入 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 {...}
}
Run Code Online (Sandbox Code Playgroud)

当我在 App 类中加入这个 WorkManager 类时,我得到

WorkerFactory:无法实例化 com.mesutemre.kutuphanem.job.ClearImageNotInArchiveWorker 错误。但应用程序并没有崩溃。这里注入dao有没有问题?

还有我的单例刀;

@Singleton
@Provides
fun provideKitapDao(database: KutuphanemDatabase) = database.getKitapDao();
Run Code Online (Sandbox Code Playgroud)

emr*_*rka 9

我解决了这个问题。我搞砸了剑柄编译器 kapts。我已经添加了

  kapt("androidx.hilt:hilt-compiler:1.0.0")
Run Code Online (Sandbox Code Playgroud)

进入 gradle 然后我添加了

<provider
   android:name="androidx.startup.InitializationProvider"
   android:authorities="${applicationId}.androidx-startup"
   tools:node="remove">
</provider>
Run Code Online (Sandbox Code Playgroud)

进入 AndroidManifest.xml 。然后问题就解决了。

  • 哇!你救我! (2认同)