jvmMain.kr.jadekim.jext.koin.KoinHolder.kt Maven / Gradle / Ivy
package kr.jadekim.jext.koin
import org.koin.core.Koin
import org.koin.core.KoinApplication
import org.koin.core.context.KoinContext
import org.koin.core.error.KoinAppAlreadyStartedException
import org.koin.core.module.Module
import org.koin.dsl.KoinAppDeclaration
class KoinHolder : KoinContext {
private var _koin: Koin? = null
private var _koinApplication: KoinApplication? = null
override fun get(): Koin = _koin ?: error("KoinApplication has not been started")
override fun getOrNull(): Koin? = _koin
fun getKoinApplicationOrNull(): KoinApplication? = _koinApplication
private fun register(koinApplication: KoinApplication) {
if (_koin != null) {
throw KoinAppAlreadyStartedException("A Koin Application has already been started")
}
_koinApplication = koinApplication
_koin = koinApplication.koin
}
override fun stopKoin() = synchronized(this) {
_koin?.close()
_koin = null
}
override fun startKoin(koinApplication: KoinApplication): KoinApplication = synchronized(this) {
register(koinApplication)
return koinApplication
}
override fun startKoin(appDeclaration: KoinAppDeclaration): KoinApplication = synchronized(this) {
val koinApplication = KoinApplication.init()
register(koinApplication)
appDeclaration(koinApplication)
return koinApplication
}
override fun loadKoinModules(module: Module) = synchronized(this) {
get().loadModules(listOf(module))
}
override fun loadKoinModules(modules: List) = synchronized(this) {
get().loadModules(modules)
}
override fun unloadKoinModules(module: Module) = synchronized(this) {
get().unloadModules(listOf(module))
}
override fun unloadKoinModules(modules: List) = synchronized(this) {
get().unloadModules(modules)
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy