我是koin和kotlin的新手,我刚刚开始在项目中使用koin,而且效果很好。我有两个viewmodel类,SubscritpionViewModel和LoginViewModel。有没有一种方法可以让我在SubscriptionViewModel中获取LoginViewModel的实例。我不知道它是否正确,但是如果我可以访问其他视图模型,它将对我很方便。
val viewModule = module {
viewModel { SubscriptionViewModel(get(), get()) }
viewModel { LoginViewModel(get()) }
}
SubscriptionViewModel
class SubscriptionViewModel(val api: ServiceApi, var user: LoginViewModel) : BaseViewModel() {
...
}
我还为此创建了一个单独的模块,但是我不知道初始化它的正确方法是什么。
val userModule = module {
single( definition = {
get<LoginViewModel>() })
}
答案 0 :(得分:3)
我认为这是一个糟糕的设计。我认为您应该做的是在LoginViewModel和SubscriptionViewModel之间创建一个公共对象,然后通过构造函数将其注入LoginViewModel和SubscriptionViewModel。也许存储库模式会很好?请描述您要实现的功能,以便我们了解为什么需要一个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()) }
}