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())}
}