如何使用Koin在另一个ViewModel中获取ViewModel实例

时间:2020-09-04 07:06:42

标签: android kotlin koin

我是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>() }) 
}

1 个答案:

答案 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()) }
}