[英]koin pass CoroutineScope as dependency for RoomDatabaseCallback
我有一個需要CoroutineScope進行初始化的數據庫。
@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()) }
}
來自https://github.com/googlecodelabs/android-room-with-a-view/blob/kotlin/app/src/main/java/com/example/android/roomwordssample/WordRoomDatabase.kt的示例,他們在ViewModel但我不能這樣做。 我必須初始化throw Koin Dependency Injection,我花了兩天時間進行嘗試和實驗,但沒有成功。
您還需要在CoroutineScope
中聲明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>()) }
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.