android - 将 Kodein 注入 WorkManager
问题描述
我是 android 开发新手,我需要注入 WorkManager 以使用 kodein,但我不知道从哪里开始
这是注入活动的方法
class MyActivity : Activity(), KodeinAware {
override val kodein by kodein()
val ds: DataSource by instance()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
ds.connect()
/* ... */
}
}
这是我的工人,我需要获取 Appdatabase 的实例以使用 kodein,但它对我不起作用
class MyWorker(context: Context, params: WorkerParameters) :
CoroutineWorker(context, params), KodeinAware {
override val kodein by kodein()
private val db: AppDatabase by instance()
override suspend fun doWork(): Result = withContext(IO) {
try {
//do the work
Result.success()
} catch (e: Exception) {
Result.retry()
}
}
}
绑定 AppDatabase
class AppBase : Application(), KodeinAware {
override val kodein = Kodein.lazy {
import(androidXModule(this@AppBase))
bind() from singleton { AppDatabase.getInstance(instance())}
}
}
解决方案
不确定您的代码是否可以编译...
关于你的工人阶级:
class MyWorker(context: Context, params: WorkerParameters) :
CoroutineWorker(context, params), KodeinAware {
override val kodein by kodein()
// ...
}
据我所知,没有这样kodein()
的方法CoroutineWorker
。因此,这是行不通的。但是,由于您有一个Context
,您可以使用以下代码来获取您的Kodein
容器:
class MyWorker(context: Context, params: WorkerParameters) :
CoroutineWorker(context, params), KodeinAware {
override val kodein by kodein { context }
// ...
}
让我们知道这是否适合您。(否则发布你得到的错误)。
推荐阅读
- hyperledger-fabric - 如何更新超级账本中资产的值
- ios - 如何解决 Xcode 9.2 中的 swift 编译器错误?
- scala - Spark Dataframe upsert 到 Elasticsearch
- qtp - 需要通过 AOM 更新存储在 ALM 上的测试脚本
- firebase - firebase 用户通过手机登录
- google-speech-api - 错误域=io.grpc 代码=14“操作系统错误”
- sql-server - 我执行了查询,但错误是这样的
- php - 如何使自动登录像facebook
- php - 在 WooCommerce 中显示当前用户 ID 的总评分
- r - 从多个 Rmd 文件和编织顺序创建一章