Koin 注入 WorkManager

Koin injecting into WorkManager

我有一个基本的工作管理器

class BackgroundSyncWorker (
    appContext: Context,
    workerParams: WorkerParameters
): Worker(appContext, workerParams) {

    override fun doWork(): Result {
        return Result.success()
    }
}

我想将我的存储库注入其中,以便在我的数据库中做一些工作。我已经正确设置了 Koin,但似乎无法找到将我的依赖项注入 Worker 的方法。我已经尝试继承 KoinComponent 并尝试使用它来实现它,但是 by inject() 不存在,但是有两个 by inject 方法我找不到如何使用。似乎没有任何关于如何注入管理器的信息,尽管有一些使用匕首的信息。

这确实有效,我只是使用 var 而不是 val.

class BackgroundSyncWorker (
    appContext: Context,
    workerParams: WorkerParameters
): Worker(appContext, workerParams), KoinComponent {

    val dataSyncRepository : DataSyncRepositoryImpl by inject()

    override fun doWork(): Result {
        return Result.success()
    }
}

我从您的代码中注意到了一些事情:

这不起作用的第一个原因是您需要 extend/inherit 来自 KoinComponent 的 BackgroundSyncWork,因此使此 BackgroundSyncWork 具有 koin 感知能力。

class BackgroundSyncWorker (
    appContext: Context,
    workerParams: WorkerParameters
): Worker(appContext, workerParams), KoinComponent {

val database: Database by inject()

    override fun doWork(): Result {
        return Result.success()
    }
}

其次:另外,请确保在 koin 模块中正确配置了数据库对象创建。它应该没有问题。