Как внедрить модель просмотра с помощью koin? (для конкретного случая использования)Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как внедрить модель просмотра с помощью koin? (для конкретного случая использования)

Сообщение Anonymous »

У меня есть общая модель представления для активности и ее фрагмента.

Моей модели представления необходимо передать аргумент при создании экземпляра из активности(

Код: Выделить всё

onCreate
только один раз)

Код: Выделить всё

viewModel =ViewModelProviders.of(this,
NoteViewModelFactory(application!!,
uid = intent!!.getStringExtra("uid")!!))
.get(NoteViewModel::class.java)
Но из фрагмента мне не нужно передавать аргумент, поскольку я уверен, что аргумент передан один раз.

Код: Выделить всё

viewModel = ViewModelProviders.of(activity!!).get(NoteViewModel::class.java)
В Koin я попробовал сделать следующее.

Код: Выделить всё

val noteModule = module(override = true) {
viewModel { (id: String) -> NoteViewModel(androidApplication(), id) }
}
в активности:

Код: Выделить всё

private val viewModel: NoteViewModel by viewModel { parametersOf(intent!!.getStringExtra("uid")!!) }
во фрагменте:

Код: Выделить всё

private val viewModel: NoteViewModel by sharedViewModel()
Приложение аварийно завершилось с ошибкой ниже:


java.lang.RuntimeException: невозможно начать действие
ComponentInfo{com.andor.navigate.notepad/com.andor.navigate.notepad.listing.NotesActivity}:
org.koin.core.error.InstanceCreationException: не удалось создать
экземпляр для
[type:Factory,primary_type:'com.andor.navigate.notepad.core.NoteViewModel']
в android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2665)
в android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
на android.app.ActivityThread.-wrap12(ActivityThread.java)
на android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
на android.os.Handler.dispatchMessage(Handler.java:102)
на android.os.Looper.loop(Looper.java:154)
на android.app.ActivityThread.main(ActivityThread.java:6119)
на java.lang.reflect.Method.invoke(Native Method)
на com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
на com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
Причина: org.koin.core.error.InstanceCreationException: не удалось создать экземпляр для
[type:Factory,primary_type:'com.andor.navigate.notepad.core.NoteViewModel']
на org.koin.core.instance.DefinitionInstance.create(DefinitionInstance.kt:61)
на org.koin.core.instance.FactoryDefinitionInstance.get(FactoryDefinitionInstance.kt:37)
на org.koin.core.definition.BeanDefinition.resolveInstance(BeanDefinition.kt:70)
на org.koin.core.scope.Scope.resolveInstance(Scope.kt:165)


Я не могу понять, как решить эту проблему с помощью KOIN.

P.S: я новичок в коин DI.

Подробнее здесь: https://stackoverflow.com/questions/567 ... c-use-case
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»