package be.vandewalleh import be.vandewalleh.controllers.KodeinController import be.vandewalleh.controllers.controllerModule import be.vandewalleh.features.Feature import be.vandewalleh.features.configurationFeature import be.vandewalleh.features.configurationModule import be.vandewalleh.features.features import be.vandewalleh.migrations.Migration import io.ktor.application.Application import io.ktor.application.log import io.ktor.auth.authenticate import io.ktor.routing.routing import me.liuwj.ktorm.database.Database import org.kodein.di.Kodein import org.kodein.di.description import org.kodein.di.generic.bind import org.kodein.di.generic.instance import org.kodein.di.generic.singleton import javax.sql.DataSource lateinit var kodein: Kodein @Suppress("unused") // Referenced in application.conf fun Application.module() { // must be first to be loaded configurationFeature() kodein = Kodein { import(controllerModule) import(configurationModule) bind() with singleton { Migration(this.kodein) } bind() with singleton { Database.Companion.connect(this.instance()) } } features() log.debug(kodein.container.tree.bindings.description()) // TODO, clean this (migration) val feature by kodein.instance() feature.execute() val controllers by kodein.instance>() routing { controllers.forEach { it.apply { registerRoutes() } } } }