Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android koin将CoroutineScope作为RoomDatabaseCallback的依赖项传递_Android_Android Room_Koin - Fatal编程技术网

Android koin将CoroutineScope作为RoomDatabaseCallback的依赖项传递

Android koin将CoroutineScope作为RoomDatabaseCallback的依赖项传递,android,android-room,koin,Android,Android Room,Koin,我有一个数据库,需要一个协同作用域进行初始化 @Database(entities = [Word::class], version = 1) abstract class WordRoomDatabase : RoomDatabase() { abstract fun wordDao(): WordDao companion object { @Volatile private var INSTANCE: WordRoomDatabase? = null fun getDatabase

我有一个数据库,需要一个协同作用域进行初始化

@Database(entities = [Word::class], version = 1)
 abstract class WordRoomDatabase : RoomDatabase() {
abstract fun wordDao(): WordDao

 companion object {
@Volatile
private var INSTANCE: WordRoomDatabase? = null

fun getDatabase(
        context: Context,
        scope: CoroutineScope//this dependecy!!!
): WordRoomDatabase {
    return INSTANCE ?: synchronized(this) {
        val instance = Room.databaseBuilder(
                context.applicationContext,
                WordRoomDatabase::class.java,
                "word_database"
        )
                .addCallback(WordDatabaseCallback(scope))
                .build()
        INSTANCE = instance
        instance
    }
}

private class WordDatabaseCallback(
        private val scope: CoroutineScope
) : RoomDatabase.Callback() {
    override fun onOpen(db: SupportSQLiteDatabase) {
        super.onOpen(db)
        INSTANCE?.let { database ->
            scope.launch(Dispatchers.IO) {
                populateDatabase(database.wordDao())
            }
        }
    }
}
  suspend fun populateDatabase(wordDao: WordDao) {
    wordDao.deleteAll()
  }
}
} 
如何将我的ViewModel作为CoroutineScope在模块中传递

val appModule = module {
  single <Dao>{ WordRoomDatabase.getInstance(get(),**dependency here
  Mymodel**).wordDao()}
  viewModel { MyModel(get(),get()) }
}
val appModule=模块{
单个{WordRoomDatabase.getInstance(get(),**依赖项
Mymodel**).wordDao()}
视图模型{MyModel(get(),get())}
}
这个例子来自 他们在ViewModel中初始化了数据库,但我不能这样做。我必须初始化依赖项注入
我花了两天时间尝试,但没有成功

您还需要在
appModule

val appModule = module {
  single <Dao>{ WordRoomDatabase.getInstance(get(),**dependency here
  Mymodel**).wordDao()}
  viewModel { MyModel(get(),get()) }

  factory { SupervisiorJob() }
  factory { CoroutineScope(Dispatchers.IO + get<SupervisorJob>()) }

}
val appModule=模块{
单个{WordRoomDatabase.getInstance(get(),**依赖项
Mymodel**).wordDao()}
视图模型{MyModel(get(),get())}
工厂{supervisorJob()}
工厂{CoroutineScope(Dispatchers.IO+get())}
}