如何在Kotlin中向Koin注入ViewModel



我们如何使用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() } 
} 

最新更新