通过 Docker 启动 Ktor 应用程序会导致:未配置 Koin 上下文。请使用 startKoin 或 koinApplication DSL
Posted
技术标签:
【中文标题】通过 Docker 启动 Ktor 应用程序会导致:未配置 Koin 上下文。请使用 startKoin 或 koinApplication DSL【英文标题】:Launching Ktor app via Docker causes: No Koin Context configured. Please use startKoin or 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 安装不能正常工作呢?
【问题讨论】:
【参考方案1】:经过长时间的研究,我终于找到了解决方案。
我将此行添加到build.gradle
文件中:
application
mainClassName = "com.mypackage.ApplicationKt"
我还编辑了resources/application.conf
文件:
application
modules = [ com.mypackage ]
// modules = [ com.mypackage.ApplicationKt.module ] // previous version
所以它对我有帮助!我希望它可以帮助你!
【讨论】:
以上是关于通过 Docker 启动 Ktor 应用程序会导致:未配置 Koin 上下文。请使用 startKoin 或 koinApplication DSL的主要内容,如果未能解决你的问题,请参考以下文章
链接 ktor 和 kotlinx.coroutines 会导致未定义的符号
在带有 Postgresql 数据库的 docker 容器中运行简单的 Kotlin Ktor 应用程序