使用Koin做依赖注入时运行ViewModel出现类未定义报错如何解决
Koin找不到ViewModel报错解决方案
错误信息:org.koin.core.error.NoBeanDefFoundException: No definition found for class:'com.saehyun.mcss.ui.SearchViewModel'. Check your definitions!
第一个必改问题:Koin初始化时模块注册错误
你在McssApplication的Koin初始化代码中,模块注册写法错误:
// 错误写法 startKoin { androidContext(this@McssApplication) module { searchModule } }
module{}是Koin提供的创建新模块的方法,你把已经定义好的searchModule套在module{}内部,本质是创建了一个空的新模块,searchModule并没有被真正注册到Koin容器中,因此Koin找不到你声明的ViewModel。
正确写法是调用modules方法传入已定义的模块:
startKoin { androidContext(this@McssApplication) // 直接传入你定义好的searchModule,多个模块用逗号分隔 modules(searchModule) }
第二个必改问题:Activity中ViewModel导包错误
错误日志显示Koin查找的ViewModel路径是com.saehyun.mcss.ui.SearchViewModel,但你实际的SearchViewModel存放路径是com.saehyun.mcss.feature.search.viewmodel.SearchViewModel,说明你在SearchActivity中导入ViewModel时导错了包,Koin按照错误的类路径查找自然匹配不到你注册的Bean。
前往SearchActivity修改SearchViewModel的导入语句即可:
// 删掉错误的导入,替换为正确路径 import com.saehyun.mcss.feature.search.viewmodel.SearchViewModel
可选检查项
如果改完上面两个问题还报错,检查以下两点:
- 确认
AndroidManifest.xml中已经配置了自定义Application,在<application>标签添加属性android:name=".di.McssApplication",否则Koin不会执行初始化 - 确认模块依赖了Koin的ViewModel扩展库:
implementation "io.insert-koin:koin-androidx-viewmodel:对应版本号"
内容的提问来源于stack exchange,提问作者임세현
相关产品推荐
相关产品推荐

