Koin注入到WorkManager中

5

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

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

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

我希望将我的存储库注入到这里,以便在数据库中进行一些操作。我已经正确设置了Koin,但似乎找不到如何将我的依赖项注入到Worker中的方法。我尝试继承KoinComponent并尝试使用它来完成,但是by inject()不存在,但有两个by inject方法,我不知道该如何使用它们。似乎没有关于如何注入到管理器中的信息,尽管有一些关于使用dagger的信息。

2个回答

11

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

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

    val dataSyncRepository : DataSyncRepositoryImpl by inject()

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

你能发布主模块配置吗? - Ashish Chaugule
该模块与Koin的普通模块相同。 - Daniel Sims

9
我从你的代码中注意到了一些事情:
这个不起作用的原因之一是你需要将BackgroundSyncWork从KoinComponent扩展/继承,以使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模块中正确配置了数据库对象创建。它应该能够正常工作。


是的,我已经明白了 : ) ,是个愚蠢的错误。不过还是谢谢你! - Daniel Sims
未解决的引用。由于接收器类型不匹配,以下候选项均不适用: - Ashish Chaugule

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接