Ktor Providing Application Instance by Using Koin

30 Views Asked by At

I would like to get values from application.conf file inside my controller class. However, I don't want to pass application instance every time instead I tried to capture and hold application instance by using koin. It seems application instance is singleton but I am not sure this is anti-pattern or not. Does it cause any performance or structural problems? I couldn't find any official resource. Can I use the application instance by injecting it with no problem?

Application.kt

fun Application.module() {
    AppModule.init(application = this)
    Database.init(application = this)
    configureRouting()
}

AppModule

object AppModule {

fun init(application: Application) {

    val appModule = module {
        single {
            ApplicationProvider(
                application = application
            )
        }
    }

    application.install(Koin) {
        slf4jLogger()
        modules(appModule)
       }
    }
}

ApplicationProvider

class ApplicationProvider(val application: Application)

Controller

class MyController(
      private val applicationProvider: ApplicationProvider,
) {
   
   fun doSomething() {
       val environment = applicationProvider.application.environment
   }
}
0

There are 0 best solutions below