Как внедрить ViewModel с Koin в Котлин?

Как нам внедрить ViewModel с зависимостью с помощью Koin?

Итак, например, у меня есть ViewModel вот так:

class SomeViewModel(val someDependency: SomeDependency, val anotherDependency: AnotherDependency): ViewModel()

Теперь в официальной документации, здесь, говорится, что для предоставления a 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? это больше не нужно?


person Archie G. Quiñones    schedule 24.05.2019    source источник


Ответы (1)


Здравствуйте, viewmodel (), это ключевые слова для доменного языка (DSL), которые помогают создать экземпляр ViewModel.

По этой [ссылке] [1] официальной документации вы можете найти дополнительную информацию

Ключевое слово viewModel помогает объявить фабричный экземпляр ViewModel. Этот экземпляр будет обрабатываться внутренней ViewModelFactory и при необходимости повторно подключить экземпляр ViewModel.

этот пример коина версии 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() } 
} 
person Corinzio    schedule 24.05.2019
comment
Понятно. Я впервые вижу эту документацию, спасибо! - person Archie G. Quiñones; 24.05.2019
comment
вы можете найти все ссылки здесь - person Corinzio; 24.05.2019
comment
обе ссылки больше не работают - person Ben; 02.12.2020
comment
Документацию теперь можно найти здесь - person Eduardo; 05.03.2021