Koin 注入 WorkManager

Dan*_*ims 5 kotlin koin androidx

我有一个基本的工作经理

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

    override fun doWork(): Result {
        return Result.success()
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Dan*_*ims 9

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

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

    val dataSyncRepository : DataSyncRepositoryImpl by inject()

    override fun doWork(): Result {
        return Result.success()
    }
}
Run Code Online (Sandbox Code Playgroud)


Far*_*aev 8

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

为什么这不起作用的第一个原因是因为您需要从 KoinComponent 扩展/继承 BackgroundSyncWork,因此使这个 BackgroundSyncWork koin-aware。

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

val database: Database by inject()

    override fun doWork(): Result {
        return Result.success()
    }
}
Run Code Online (Sandbox Code Playgroud)

第二:另外,请确保在 koin 模块中正确配置了数据库对象创建。它应该可以正常工作。