我们如何使用Koin注入具有依赖关系的ViewModel?
例如,我有一个ViewModel
就是这样:
class SomeViewModel(val someDependency: SomeDependency, val anotherDependency: AnotherDependency): ViewModel()
现在官方文档here声明要提供ViewModel
,我们可以执行以下操作:
val myModule : Module = applicationContext {
// ViewModel instance of MyViewModel
// get() will resolve Repository instance
viewModel { SomeViewModel(get(), get()) }
// Single instance of SomeDependency
single<SomeDependency> { SomeDependency() }
// Single instance of AnotherDependency
single<AnotherDependency> { AnotherDependency() }
}
然后注入它,我们可以做类似的事情:
class MyActivity : AppCompatActivity(){
// Lazy inject SomeViewModel
val model : SomeViewModel by viewModel()
override fun onCreate() {
super.onCreate()
// or also direct retrieve instance
val model : SomeViewModel= getViewModel()
}
}
对我来说,令人困惑的部分是,通常您需要一个ViewModelFactory
才能为ViewModel
提供依赖关系。 ViewModelFactory
在哪里?不再需要吗?
答案 0 :(得分:2)
您好viewmodel()是帮助创建ViewModel实例的领域特定语言(DSL)关键字。
在此link官方文档中,您可以找到更多信息
viewModel关键字有助于声明ViewModel的工厂实例。 此实例将由内部ViewModelFactory和 如果需要,请重新附加ViewModel实例。