【问题标题】:Launching Ktor app via Docker causes: No Koin Context configured. Please use startKoin or koinApplication DSL通过 Docker 启动 Ktor 应用程序会导致:未配置 Koin 上下文。请使用 startKoin 或 koinApplication DSL
【发布时间】:2021-06-07 16:03:36
【问题描述】:

我正在尝试在 Docker 中启动我的 Ktor 后端应用程序。但我在应用启动时有一个例外:

java.lang.IllegalStateException: No Koin Context configured. Please use startKoin or koinApplication DSL. 
        at org.koin.core.context.KoinContextHandler.getContext(KoinContextHandler.kt:29)
        at org.koin.core.context.KoinContextHandler.get(KoinContextHandler.kt:35)
        at org.koin.ktor.ext.KtorApplicationExtKt.getKoin(KtorApplicationExt.kt:34)
        at com.widgets.ApplicationKt$module$$inlined$inject$1.invoke(KtorApplicationExt.kt:77)
        at kotlin.UnsafeLazyImpl.getValue(Lazy.kt:81)
        at com.widgets.ApplicationKt$module$4.invoke(Application.kt:117)
        at com.widgets.ApplicationKt$module$4.invoke(Application.kt)
        at io.ktor.auth.Authentication.configure(Authentication.kt:77)
        at io.ktor.auth.Authentication$Feature.install(Authentication.kt:165)
        at io.ktor.auth.Authentication$Feature.install(Authentication.kt:148)
        at io.ktor.application.ApplicationFeatureKt.install(ApplicationFeature.kt:68)
        at com.widgets.ApplicationKt.module(Application.kt:116)
        at com.widgets.ApplicationKt.module$default(Application.kt:91)

这是我的应用程序代码:

fun main(args: Array<String>) {
    embeddedServer(Netty) {
        module {
            install(Koin) {
                modules(
                    module {
                        single<Logger> { BackendLogger() }
                    },
                    ApiInjection.koinBeans
                    // ...
                )
            }
            apiModule()
        }
    }.start(wait = true)
}

@kotlin.jvm.JvmOverloads
fun Application.apiModule() {
    val userApi by inject<UserApi>() // when this dependency used - I have a crash
    // ...
}

当我在本地启动我的应用程序 (Intellij Idea) 时,一切正常。那么为什么 Koin 安装不能正常工作呢?

【问题讨论】:

    标签: docker kotlin ktor koin


    【解决方案1】:

    经过长时间的研究,我终于找到了解决方案。

    我将此行添加到build.gradle 文件中:

    application {
        mainClassName = "com.mypackage.ApplicationKt"
    }
    

    我还编辑了resources/application.conf 文件:

        application {
            modules = [ com.mypackage ]
    //        modules = [ com.mypackage.ApplicationKt.module ] // previous version
        }
    

    所以它对我有帮助!我希望它可以帮助你!

    【讨论】:

      猜你喜欢
      • 2020-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-13
      • 1970-01-01
      • 2020-04-28
      • 1970-01-01
      相关资源
      最近更新 更多