Kodein Injecting into 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()
}
}
}

绑定应用数据库

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 }
// ...
}

让我们知道这是否适合您。(否则发布您收到的错误(。

相关内容

  • 没有找到相关文章

最新更新