Until the Ktor 2.0 plugin for Koin is added, you can use the solution below, which is taken from here (credits to phucynwa). Also, you can track the Pull request here.
object KoinPlugin : ApplicationPlugin<Application, KoinApplication, Unit> {
override val key: AttributeKey<Unit>
get() = AttributeKey("Koin")
override fun install(
pipeline: Application,
configure: KoinApplication.() -> Unit
) {
val monitor = pipeline.environment.monitor
val koinApplication = startKoin(appDeclaration = configure)
monitor.raise(EventDefinition(), koinApplication)
monitor.subscribe(ApplicationStopping) {
monitor.raise(EventDefinition(), koinApplication)
stopKoin()
monitor.raise(EventDefinition(), koinApplication)
}
}
}
fun Application.installPlugins() {
install(KoinPlugin)
}