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