【问题标题】:Koin injecting into WorkManagerKoin 注入 WorkManager
【发布时间】:2019-08-04 18:23:41
【问题描述】:

我有一个基本的工作经理

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

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

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

【问题讨论】:

    标签: kotlin androidx koin


    【解决方案1】:

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

    class BackgroundSyncWorker (
        appContext: Context,
        workerParams: WorkerParameters
    ): Worker(appContext, workerParams), KoinComponent {
    
        val dataSyncRepository : DataSyncRepositoryImpl by inject()
    
        override fun doWork(): Result {
            return Result.success()
        }
    }
    

    【讨论】:

    • 可以发布主模块配置
    • 该模块与Koin的普通模块相同
    【解决方案2】:

    我从您的代码中注意到了几件事:

    这不起作用的第一个原因是因为您需要从 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 模块中正确配置了数据库对象的创建。它应该没有问题。

    【讨论】:

    • 是的,我在下面得到它:),这是一个愚蠢的错误。不过谢谢!
    • 未解决的参考。由于接收器类型不匹配,以下候选均不适用:
    猜你喜欢
    • 1970-01-01
    • 2020-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-13
    • 1970-01-01
    • 1970-01-01
    • 2023-01-09
    相关资源
    最近更新 更多