我们如何使用koin向依赖项注入依赖?
所以例如,我有一个 ViewModel
,那就是这样:
class SomeViewModel(val someDependency: SomeDependency, val anotherDependency: AnotherDependency): ViewModel()
现在,这里的官方文档指出,要提供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
在哪里?不再需要吗?
hello viewModel((这是一个特定域的语言(DSL(关键字,可帮助创建ViewModel实例。
在此[链接] [1]的官方文档中,您可以找到更多信息
ViewModel关键字有助于声明ViewModel的出厂实例。此实例将由内部ViewModeFactory和ReatTach ViewModel实例(如果需要(。
Koin版本2.0 [1]的示例:https://insert-koin.io/docs/2.0/documentation/koin-android/index.html#_viewmodel_dsl
// Given some classes
class Controller(val service : BusinessService)
class BusinessService()
// just declare it
val myModule = module {
single { Controller(get()) }
single { BusinessService() }
}