如何使用 koin 在 viewmodel 中注入 Room
How to inject Room in viewmodel using koin
这是我使用 koin 的第一个 mvvm 项目,我使用的是 Room 数据库。我在 viemwodel 中进行网络调用,从 api 获取数据后,我想将其存储在数据库中。下面是我的 class,它具有所有数据库方法,如插入和删除。
class UserViewModel(application: Application) : AndroidViewModel(application) {
private val userSDAO: UserDAO
private val userDB: AppSettingsDatabase
init {
userDB = AppSettingsDatabase.getAppSettingsDatabase(application.applicationContext)!!
userDAO = userDB.userDao()
}
fun getAppSetting():LiveData<AppSettingsEntity>{
return userDB.appSettingDao().getAllAppSettings()
}
fun deleteUser() {
userDB.databaseWriteExecutor.execute { ->
userDAO.deleteUser()
}
}
}
我在 activity 中这样调用 class
userViewModel = ViewModelProvider(this).get(UserViewModel::class.java)
现在我想在我进行网络 api 调用的视图模型 class 中调用它,但我不知道使用 koin 或任何方法访问它的最佳方法是什么其他 way.I 有不同的方法,我需要访问数据库,我必须在每个方法中像上面那样初始化它。
class SubscriptionViewModel(): BaseViewModel() {
fun init(owner:ViewModelStoreOwner) {
userServiceViewModel = ViewModelProvider(owner).get(UserServiceViewModel::class.java)
}
}
一般来说,在 ViewModel
中不访问 db 对象是更好的模式。我的意思是 dao 应该在数据源 class 中使用,然后数据源将被注入 ViewModel
甚至更好,在存储库中使用数据源,然后将存储库注入 ViewModel
=10=].
之后,您不得访问另一个内的 ViewModel
。他们应该是独立的。如果您想在多个 ViewModel
中对数据库或 api 执行某些操作,请通过公共存储库访问它们 class.
这是我使用 koin 的第一个 mvvm 项目,我使用的是 Room 数据库。我在 viemwodel 中进行网络调用,从 api 获取数据后,我想将其存储在数据库中。下面是我的 class,它具有所有数据库方法,如插入和删除。
class UserViewModel(application: Application) : AndroidViewModel(application) {
private val userSDAO: UserDAO
private val userDB: AppSettingsDatabase
init {
userDB = AppSettingsDatabase.getAppSettingsDatabase(application.applicationContext)!!
userDAO = userDB.userDao()
}
fun getAppSetting():LiveData<AppSettingsEntity>{
return userDB.appSettingDao().getAllAppSettings()
}
fun deleteUser() {
userDB.databaseWriteExecutor.execute { ->
userDAO.deleteUser()
}
}
}
我在 activity 中这样调用 class
userViewModel = ViewModelProvider(this).get(UserViewModel::class.java)
现在我想在我进行网络 api 调用的视图模型 class 中调用它,但我不知道使用 koin 或任何方法访问它的最佳方法是什么其他 way.I 有不同的方法,我需要访问数据库,我必须在每个方法中像上面那样初始化它。
class SubscriptionViewModel(): BaseViewModel() {
fun init(owner:ViewModelStoreOwner) {
userServiceViewModel = ViewModelProvider(owner).get(UserServiceViewModel::class.java)
}
}
一般来说,在 ViewModel
中不访问 db 对象是更好的模式。我的意思是 dao 应该在数据源 class 中使用,然后数据源将被注入 ViewModel
甚至更好,在存储库中使用数据源,然后将存储库注入 ViewModel
=10=].
之后,您不得访问另一个内的 ViewModel
。他们应该是独立的。如果您想在多个 ViewModel
中对数据库或 api 执行某些操作,请通过公共存储库访问它们 class.