我是安卓开发的新手,我需要注入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())}
}
}发布于 2020-01-03 17:54:55
不确定你的代码能不能编译...
关于你的工人类:
class MyWorker(context: Context, params: WorkerParameters) :
CoroutineWorker(context, params), KodeinAware {
override val kodein by kodein()
// ...
}据我所知,CoroutineWorker还没有像kodein()这样的方法。因此,这是不起作用的。但是,由于您有一个Context,您可以使用以下代码来获取Kodein容器:
class MyWorker(context: Context, params: WorkerParameters) :
CoroutineWorker(context, params), KodeinAware {
override val kodein by kodein { context }
// ...
}请让我们知道这是否适用于您。(否则发布您得到的错误)。
https://stackoverflow.com/questions/59546159
复制相似问题