我有一个用于活动的共享视图模型,它是片段。
从活动实例化时,我的视图模型需要传递的参数(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:无法为 [类型创建实例: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.os.Handler.dispatchMessage(Handler.java:102) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477) 在 android.os。 Looper.loop(Looper.java:154) 在 android.app.ActivityThread.main(ActivityThread.java:6119) 在 java.lang。reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)作者:org.koin.core.error.InstanceCreationException:无法在 org.koin.core.instance.DefinitionInstance.create 为 [type:Factory,primary_type:'com.andor.navigate.notepad.core.NoteViewModel'] 创建实例(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)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) at org.koin.core.scope.Scope.resolveInstance(Scope.kt:165)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) at org.koin.core.scope.Scope.resolveInstance(Scope.kt:165)] 在 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)] 在 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 解决这个问题。
PS:我是 koin DI 的新手。