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 模块中正确配置了数据库对象创建。它应该没有问题。
我有一个基本的工作管理器
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 模块中正确配置了数据库对象创建。它应该没有问题。