Kotlin 在方法调用中获取Micronaut ResourceLoader

Kotlin 在方法调用中获取Micronaut ResourceLoader,kotlin,dependency-injection,micronaut,Kotlin,Dependency Injection,Micronaut,我试图通过使用注入来获得实用方法的ResourceLoader,但我一直得到以下错误: Caused by: kotlin.UninitializedPropertyAccessException: lateinit property resourceResolver has not been initialized @Singleton 类注入{ @注入 lateinit var resourceResolver:ResourceLoader } val inj=注射() fun pars

我试图通过使用注入来获得实用方法的ResourceLoader,但我一直得到以下错误:

Caused by: kotlin.UninitializedPropertyAccessException: lateinit property resourceResolver has not been initialized

@Singleton
类注入{
@注入
lateinit var resourceResolver:ResourceLoader
}
val inj=注射()
fun parseYaml(文件路径:字符串):T{
if(!inj.resourcesolver.getResource(filePath).isPresent){
抛出IllegalArgumentException(“找不到文件“$filePath”)
}
val inputStream=inj.resourcesolver.getResourceAsStream(filePath.get())
返回Yaml().load(inputStream)作为T
}
我不需要使用注入来实现这一点,我只需要从parseYaml方法访问ResourceResolver

我不需要注射就能做到这一点

你确实需要注射。这就是代码使用
@Inject
的原因


问题是您正在创建一个新的
注入实例
,而不是使用容器提供的实例,因此您的实例不会按照您希望的方式初始化。如果您将
@Inject
注入
Injections
实例,而不是
val inj=Injections()。是否需要创建包含解析函数的新类?“是否需要创建包含解析函数的新类?”-不一定。您可以将函数放入现有类中。
@Singleton
class Injections {
    @Inject
    lateinit var resourceResolver: ResourceLoader
}

val inj = Injections()

fun <T> parseYaml(filePath: String): T {
    if (!inj.resourceResolver.getResource(filePath).isPresent) {
        throw IllegalArgumentException("Could not find file '$filePath'")
    }
    val inputStream = inj.resourceResolver.getResourceAsStream(filePath).get()
    return Yaml().load(inputStream) as T
}