首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kodein注入到WorkManager中

Kodein注入到WorkManager中
EN

Stack Overflow用户
提问于 2019-12-31 23:53:38
回答 1查看 288关注 0票数 2

我是安卓开发的新手,我需要注入WorkManager来使用kodein,但我不知道从哪里开始

下面是注入活动的方法

代码语言:javascript
复制
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,但它不适用于我

代码语言:javascript
复制
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

代码语言:javascript
复制
class AppBase : Application(), KodeinAware {

    override val kodein = Kodein.lazy {
    import(androidXModule(this@AppBase))
    bind() from singleton { AppDatabase.getInstance(instance())}
  }
}
EN

回答 1

Stack Overflow用户

发布于 2020-01-03 17:54:55

不确定你的代码能不能编译...

关于你的工人类:

代码语言:javascript
复制
class MyWorker(context: Context, params: WorkerParameters) :
    CoroutineWorker(context, params), KodeinAware {

    override val kodein by kodein()
    // ...
}

据我所知,CoroutineWorker还没有像kodein()这样的方法。因此,这是不起作用的。但是,由于您有一个Context,您可以使用以下代码来获取Kodein容器:

代码语言:javascript
复制
class MyWorker(context: Context, params: WorkerParameters) :
    CoroutineWorker(context, params), KodeinAware {

    override val kodein by kodein { context }
    // ...
}

请让我们知道这是否适用于您。(否则发布您得到的错误)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59546159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档