如何使用 sharedview 模型 koin 注入具有作用域的视图模型 android
How to inject view model with scope using sharedview model koin android
需要澄清一件事,现在我正在处理一个流程,其中我有两个视图模型,一个依赖于另一个视图模型,为了处理这件事,我尝试在我的 Base 中注入两个视图模型 Activity 我用这种方法遇到的问题。每次我尝试访问这些视图模型时,Base Activity 都会返回新实例,有什么方法可以管理该视图模型的范围,这样我就可以轻松访问它的属性而无需添加额外的 Api来电。
模块Class
val homeModule= module {
single { HomeDispatcher(get(), get()) }
viewModel { HomeViewModel (get()) }
}
**Main Activity**
import org.koin.android.viewmodel.ext.android.viewModel
class NotificationActivity : BaseActivity() {
private val viewModel: HomeViewModel by inject()
private val viewModel: HomeViewModel by viewModel()
}
class NotificationsFragment : BaseFragment() {
private val viewModel: HomeViewModel by viewModels({requireActivity()})
private val viewModelx: HomeViewModel by activityViewModels
}
> by using viewModels({requireActivity()}) getting instance not found.
Hilt 更新
implementation "androidx.activity:activity-ktx:1.2.0"
private val viewModelx: HomeViewModel by viewModels
上面提到的库有视图模型,可以直接懒惰地注入视图模型。
您需要在 koin 模块中提供上下文
val appModule = module {
single { HomeViewModel (get()) } // it will get the context from Application Context
}
在activity你想用就用
private val viewModel: HomeViewModel by inject()
它将return您的viewModel
的单个实例
import org.koin.android.viewmodel.ext.android.viewModel
import org.koin.android.viewmodel.ext.android.sharedViewModel
private val viewModel: HomeViewModel by viewModel()
因此通过在 activity 中使用 viewModel()
和片段 class
中的 sharedViewModel<MyViewModel>()
解决了这个问题
需要澄清一件事,现在我正在处理一个流程,其中我有两个视图模型,一个依赖于另一个视图模型,为了处理这件事,我尝试在我的 Base 中注入两个视图模型 Activity 我用这种方法遇到的问题。每次我尝试访问这些视图模型时,Base Activity 都会返回新实例,有什么方法可以管理该视图模型的范围,这样我就可以轻松访问它的属性而无需添加额外的 Api来电。
模块Class
val homeModule= module {
single { HomeDispatcher(get(), get()) }
viewModel { HomeViewModel (get()) }
}
**Main Activity**
import org.koin.android.viewmodel.ext.android.viewModel
class NotificationActivity : BaseActivity() {
private val viewModel: HomeViewModel by inject()
private val viewModel: HomeViewModel by viewModel()
}
class NotificationsFragment : BaseFragment() {
private val viewModel: HomeViewModel by viewModels({requireActivity()})
private val viewModelx: HomeViewModel by activityViewModels
}
> by using viewModels({requireActivity()}) getting instance not found.
Hilt 更新
implementation "androidx.activity:activity-ktx:1.2.0"
private val viewModelx: HomeViewModel by viewModels
上面提到的库有视图模型,可以直接懒惰地注入视图模型。
您需要在 koin 模块中提供上下文
val appModule = module {
single { HomeViewModel (get()) } // it will get the context from Application Context
}
在activity你想用就用
private val viewModel: HomeViewModel by inject()
它将return您的viewModel
的单个实例import org.koin.android.viewmodel.ext.android.viewModel
import org.koin.android.viewmodel.ext.android.sharedViewModel
private val viewModel: HomeViewModel by viewModel()
因此通过在 activity 中使用 viewModel()
和片段 class
sharedViewModel<MyViewModel>()
解决了这个问题