KMM Compose项目中Koin报No Definition错误求助
KMM Compose项目中Koin No Definition错误排查
核心错误原因及解决步骤
SplashRepo未在Koin模块中注册
检查common模块的Koin初始化代码,确保已添加SplashRepo的注册逻辑,示例:val splashModule = module { single<SplashRepo> { SplashRepoImpl(get()) } // 替换为你的实际实现类 }注意注册的类型要与注入时的类型完全一致,若使用接口/实现类分离,需注册接口类型而非仅实现类。
Koin模块未被加载到容器
确认common模块的Koin启动配置中,已包含SplashRepo所在的模块:startKoin { modules( coreModule, splashModule, // 必须加入该模块 // 其他业务模块 ) }Android端MainActivity中避免单独覆盖Koin配置,直接复用common模块的初始化逻辑。
Decompose组件与Koin容器未正确关联
检查Splash模块和CoreApp组件的代码,确保创建ViewModel时使用的是包含SplashRepo注册的Koin实例:
示例:val viewModel = koin.get<SplashViewModel>()或通过Decompose的
ComponentContext绑定Koin,保证组件使用的容器包含目标依赖。类型/限定符不匹配
检查SplashViewModel中注入的SplashRepo是否与Koin注册的类型、限定符完全一致:
若注册时使用了限定符:single<SplashRepo>(named("main")) { SplashRepoImpl(get()) }注入时必须指定对应限定符:
class SplashViewModel( @Named("main") private val repo: SplashRepo, // ... ) : ViewModel()
额外验证点
- 确认common模块的Koin初始化逻辑在Android(Application或MainActivity)和iOS端(AppDelegate或main函数)均被正确调用。
- 检查SplashRepo实现类的构造函数依赖是否也已在Koin中注册,避免因嵌套依赖缺失导致注册失败。
内容的提问来源于stack exchange,提问作者Shad Adman
相关产品推荐
相关产品推荐

