You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用@KoinViewModel时加@InjectedParam崩溃,缺失什么注解?

问题描述

原本带有@KoinViewModel注解的TargetVm可正常实例化,为其添加一个用@Factory注解的Test类作为构造参数后,程序运行崩溃,报错信息如下:

Caused by: org.koin.core.error.NoParameterFoundException: Can't get injected parameter #0 from DefinitionParameters[] for type 'es.elhaso.bitjump.Test'
    at org.koin.core.parameter.ParametersHolder.elementAt(ParametersHolder.kt:45)
    ... 93 more

相关代码如下:
原正常运行的代码

@KoinViewModel
class TargetVm() : ViewModel() {
…
}

@Composable
fun SomeView() {
    val vm = koinViewModel<TargetVm>()
…
}

修改后报错的代码

@Factory
class Test {
    constructor() {
        Log.d(TAG, "Constructor")
    }
}

@KoinViewModel
class TargetVm(
    @InjectedParam val bitPrefs: Test
) : ViewModel() {
…
}

Koin初始化代码

class MainApplication : Application() {
    override fun onCreate() {
        super.onCreate()
        startKoin {
            androidLogger()
            androidContext(this@MainApplication)
            defaultModule()
…
}
问题原因与解决方法

1. 注解使用错误

@InjectedParam的作用是接收外部手动传递的参数(比如调用koinViewModel时通过parameters lambda传入),而非让Koin从容器中注入已注册的依赖。你已经用@Factory将Test类注册到Koin容器中,此时添加@InjectedParam会误导Koin去寻找外部传入的参数,从而触发报错。

2. 修正核心代码

直接去掉TargetVm构造参数上的@InjectedParam注解即可:

@KoinViewModel
class TargetVm(
    val bitPrefs: Test
) : ViewModel() {
    // ...
}

3. 确保加载注解生成的模块

使用@Factory和@KoinViewModel这类编译时注解时,Koin会自动生成对应的依赖模块,需要在初始化时加载该模块。检查startKoin配置,确保包含注解生成的模块:

class MainApplication : Application() {
    override fun onCreate() {
        super.onCreate()
        startKoin {
            androidLogger()
            androidContext(this@MainApplication)
            // 加载注解生成的模块
            modules(annotatedModule())
            // 若有自定义模块,可同时加载
            // modules(defaultModule(), annotatedModule())
        }
    }
}

4. 检查依赖配置(可选)

确保项目已添加Koin注解相关依赖(以Gradle为例):

// 注解处理器
kapt "io.insert-koin:koin-annotations-compiler:${koin_version}"
// Koin核心与AndroidX Compose支持
implementation "io.insert-koin:koin-annotations:${koin_version}"
implementation "io.insert-koin:koin-androidx-compose:${koin_version}"

内容的提问来源于stack exchange,提问作者Grzegorz Adam Hankiewicz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 10:53:11