【发布时间】:2019-06-26 05:58:32
【问题描述】:
我有一个用于活动的共享视图模型,它是片段。
我的视图模型需要在从 Activity 实例化时传递参数(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:无法启动活动 组件信息{com.andor.navigate.notepad/com.andor.navigate.notepad.listing.NotesActivity}: org.koin.core.error.InstanceCreationException:无法创建 例如 [类型:工厂,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(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 原因:org.koin.core.error.InstanceCreationException:无法创建实例 [类型:工厂,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:我是 koin DI 的新手。
【问题讨论】:
标签: android dependency-injection koin