【问题标题】:Obtain Micronaut ResourceLoader in Method Call在方法调用中获取 Micronaut ResourceLoader
【发布时间】:2020-09-09 22:24:10
【问题描述】:

我正在尝试通过使用注入来获取实用程序方法的 ResourceLoader,但我不断收到以下错误:

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

@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
}

我不需要使用注入来实现这一点,我只需要从 parseYaml 方法访问 ResourceResolver。

【问题讨论】:

    标签: kotlin dependency-injection micronaut


    【解决方案1】:

    我不需要使用注射来实现这一点

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

    问题是您正在创建Injections 的新实例,而不是使用容器提供的实例,因此您的实例不会按照您希望的方式进行初始化。如果您将@Inject Injections 实例放入需要访问它的任何bean,而不是val inj = Injections(),那将起作用。

    【讨论】:

    • 我对 Java 还很陌生,所以我不确定这意味着什么。我需要创建一个包含解析函数的新类吗?
    • "我需要创建一个包含解析函数的新类吗?" - 不必要。您可以将该函数放在现有的类中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-09
    • 2011-09-30
    • 1970-01-01
    • 1970-01-01
    • 2011-02-08
    相关资源
    最近更新 更多