我是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()
}
}
}
绑定应用数据库
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 }
// ...
}
让我们知道这是否适合您。(否则发布您收到的错误(。