如何在Kotlin中用Koin注入ViewModel?

时间:2019-05-24 01:25:52

标签: android kotlin android-viewmodel koin

我们如何使用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在哪里?不再需要吗?

1 个答案:

答案 0 :(得分:2)

您好viewmodel()是帮助创建ViewModel实例的领域特定语言(DSL)关键字。

在此link官方文档中,您可以找到更多信息

  

viewModel关键字有助于声明ViewModel的工厂实例。   此实例将由内部ViewModelFactory和   如果需要,请重新附加ViewModel实例。