gpt4 book ai didi

android - 如何在 Room MVVM 架构中实现 Koin 依赖注入(inject)

转载 作者:行者123 更新时间:2023-12-05 08:21:53 28 4
gpt4 key购买 nike

我正在关注 this实现 koin 依赖注入(inject)的文档,但它对我没有帮助。我被困在 Modules.kt 文件中 我不知道如何将数据库的 DAO 接口(interface)传递给 koin 的 module 中的 Repository 构造函数。

UserEntity.kt

@Entity(tableName = "user_table")
data class UserEntity(...)

UserDao.kt

@Dao
interface UserDao { ... }

UserRepository.kt

class UserRepository(private val userDao: UserDao) {...}

UserViewModel.kt

class UserViewModel(private val repository: UserRepository) : ViewModel() {...}

UserDatabase.kt

@Database(
entities = [UserEntity::class],
version = 1,
exportSchema = false
)
abstract class UserDatabase : RoomDatabase() {
abstract fun userDao(): UserDao

companion object {

@Volatile
private var INSTANCE: UserDatabase? = null
fun getDatabase(context: Context, scope: CoroutineScope): UserDatabase {
return INSTANCE ?: synchronized(this) {
val instance = Room.databaseBuilder(
context.applicationContext,
UserDatabase::class.java,
"user_data_database"
).build()
INSTANCE = instance
instance
}
}
}
}

Modules.kt 这是 Koin 模块

val appModule = module{

single { UserRepository(get()) }

viewModel { UserViewModel(get()) }

}

最佳答案

首先在您从 Room Database 类扩展的类文件中。您将需要创建一个抽象函数来提供您的 Dao 接口(interface)实例,

@Database(entities = [Run::class],version = 1 , exportSchema = false)
abstract class RunningDatabase : RoomDatabase() {

abstract fun getRunDao(): RunDao
}

然后在您的模块中像这样为房间数据库提供实例,

single {
Room.databaseBuilder(
androidApplication,
RunningDatabase::class.java,
RUNNING_DATABASE_NAME
).build()
}

现在可以调用Room Database类的抽象函数来获取Dao接口(interface)的Instance。像这样,

single<RunningDao> {
val database = get<RunningDatabase>()
database.getRunDao()
}

现在您可以在任何构造函数中传递此接口(interface)。

关于android - 如何在 Room MVVM 架构中实现 Koin 依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69834782/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com