android - 如何在另一个 ViewModel withKoin 中获取 ViewModel 实例
问题描述
我是 koin 和 kotlin 的新手,我刚刚开始在我的项目中使用 koin,它工作得很好。我有两个视图模型类,SubscritpionViewModel 和 LoginViewModel。有没有办法可以在 SubscriptionViewModel 中获取 LoginViewModel 的实例。我不知道它是否正确,但如果我可以访问另一个视图模型,它对我来说会很方便。
val viewModule = module {
viewModel { SubscriptionViewModel(get(), get()) }
viewModel { LoginViewModel(get()) }
}
订阅视图模型
class SubscriptionViewModel(val api: ServiceApi, var user: LoginViewModel) : BaseViewModel() {
...
}
我还为此创建了一个单独的模块,但我不知道初始化它的正确方法是什么。
val userModule = module {
single( definition = {
get<LoginViewModel>() })
}
解决方案
我认为这是一个糟糕的设计。我认为您应该做的是在 LoginViewModel 和 SubscriptionViewModel 之间创建一个公共对象,并通过构造函数将其注入 LoginViewModel 和 SubscriptionViewModel。也许存储库模式会很好?请描述您想要实现的功能,以便我们了解为什么您需要一个 ViewModel 包含在另一个 ViewModel 中。使用存储库,您可以执行以下操作:
class UserRepository(private val serviceApi: ServiceApi) {
}
class SubscriptionViewModel(val userRepository: UserRepository) : BaseViewModel() {
...
}
class LoginViewModel(val userRepository: UserRepository) : BaseViewModel() {
...
}
在 Koin 模块中:
module {
single { UserRepository(get()) }
viewModel { SubscriptionViewModel(get()) }
viewModel { LoginViewModel(get()) }
}
推荐阅读
- testing - 测试 Google Invisible reCAPTCHA v2
- deep-learning - 如果我有双数据类型作为输入(数据类型:双),我是否需要嵌入 LSTM
- javascript - 连接一段时间后 Redis ETIMEDOUT 错误
- java - 如何在使用 ImageIO.read() 时解决“java.io.EOFException:ZLIB 输入流的意外结束”
- html - 单击任何单选按钮以切换开关
- laravel - 如何在刀片文件中获取性别(男/女)
- .net - 如何在 webforms .net 2.0 应用程序中实现 Reflect XSS 修复
- qt - 光标下的 QGraphicsItem 在离开对象时离开另一个项目
- flutter - SliverGeometry 无效:“maxPaintExtent”小于 Flutter 中的“paintExtent”
- html - 如何修复字体真棒图标未显示在移动设备/ chrome 上?