Коин: Как получить тот же экземпляр, соответствующий заданному ключу

Я использовал ViewModelProvider(this).get(myDataIdentifier, MyViewModel::class.java), чтобы получить одну и ту же модель просмотра для каждого идентификатора.

Теперь я хочу использовать Koin для внедрения зависимостей, но не могу понять, как заставить это работать.

Я могу ввести данные через val viewModel by viewModel(), но где я могу получить тот же экземпляр, обозначенный myDataIdentifier? Я не могу осмыслить квалификатор, параметр, ....

Извините, может быть, это глупый вопрос, и я просто что-то упустил.


person Thomas Cirksena    schedule 16.10.2020    source источник


Ответы (1)


Попробуйте использовать именованные компоненты, назовите свою модель просмотра (теперь это может быть синглтон?)

val myModule = module {
    viewModel(named("myViewModel")) { MyViewModel() }
}

...

val viewModel: MyViewModel by viewModel(named("myViewModel"))

https://engineering.bigshyft.com/koin-2-0-for-android/

person JakeB    schedule 16.10.2020
comment
Спасибо за ваш отзыв. Если я понимаю это правильно, этот подход предполагает, что я заранее знаю все возможные значения и предоставляю их как именованные варианты в myModule. Но если я хочу отображать данные в RecyclerView, и каждый элемент данных имеет уникальный идентификатор, который я не знаю, но который я хочу использовать для ссылки на ViewModel, тогда это невозможно, не так ли? - person Thomas Cirksena; 16.10.2020
comment
Я не уверен, чего вы пытаетесь достичь, вводя модели просмотра на основе значений из recyclerview, сама модель просмотра не должна быть ограничена конкретным объектом или набором значений, а вместо этого должна быть воссоздана и взаимозаменяема между элементами для этого Посмотреть. Каждая модель просмотра в ресайклере может иметь идентификатор объекта, из которого она создается, затем этот идентификатор может быть позже использован для запроса базы данных или списка чего-либо, чтобы создать последующие модели просмотра для другого представления ... - person JakeB; 17.10.2020