CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-io-insert-koin--koin-core-jvm

Core dependency injection framework for Kotlin multiplatform applications with DSL-based configuration and type-safe dependency resolution.

Pending
Overview
Eval results
Files

application-setup.mddocs/

Application Setup & Configuration

Core application initialization and configuration functionality for setting up the Koin dependency injection container and managing the application lifecycle.

Capabilities

Application Initialization

Start the global Koin context with module and configuration setup.

/**
 * Start Koin with application configuration
 * @param appDeclaration - Configuration block for KoinApplication setup
 * @return KoinApplication instance
 */
fun startKoin(appDeclaration: KoinAppDeclaration): KoinApplication

/**
 * Start Koin with pre-configured KoinApplication
 * @param koinApplication - Pre-configured KoinApplication instance
 * @return KoinApplication instance
 */
fun startKoin(koinApplication: KoinApplication): KoinApplication

/**
 * Stop the global Koin context and clean up resources
 */
fun stopKoin()

/**
 * Create KoinApplication instance with configuration
 * @param createEagerInstances - Whether to create eager instances (default: true)
 * @param appDeclaration - Optional configuration block
 * @return KoinApplication instance
 */
fun koinApplication(createEagerInstances: Boolean = true, appDeclaration: KoinAppDeclaration? = null): KoinApplication

/**
 * Create KoinApplication instance with configuration block
 * @param appDeclaration - Configuration block
 * @return KoinApplication instance
 */
fun koinApplication(appDeclaration: KoinAppDeclaration?): KoinApplication

/**
 * Create KoinApplication instance with KoinConfiguration
 * @param configuration - KoinConfiguration instance
 * @return KoinApplication instance
 */
fun koinApplication(configuration: KoinConfiguration?): KoinApplication

Usage Examples:

import org.koin.core.context.startKoin
import org.koin.core.context.stopKoin
import org.koin.dsl.module
import org.koin.dsl.koinApplication

// Simple startup with modules
startKoin {
    modules(appModule, networkModule)
}

// Advanced startup with configuration
startKoin {
    modules(listOf(appModule, networkModule))
    printLogger(Level.DEBUG)
    allowOverride(false)
    properties(mapOf("api.url" to "https://api.example.com"))
}

// Using koinApplication for more control
val app = koinApplication {
    modules(appModule)
    printLogger(Level.INFO)
}
startKoin(app)

// Pre-configured application
val configuredApp = koinApplication(createEagerInstances = false) {
    modules(testModules)
    allowOverride(true)
}
startKoin(configuredApp)

// Programmatic startup
val koinApp = koinApplication {
    modules(appModule)
}
startKoin(koinApp)

// Shutdown
stopKoin()

Module Loading and Unloading

Dynamic module management for runtime loading and unloading of dependency modules.

/**
 * Load module into running Koin application
 * @param module - Module to load
 */
fun loadKoinModules(module: Module)

/**
 * Load multiple modules into running Koin application
 * @param modules - List of modules to load
 */
fun loadKoinModules(modules: List<Module>)

/**
 * Unload module from running Koin application
 * @param module - Module to unload
 */
fun unloadKoinModules(module: Module)

/**
 * Unload multiple modules from running Koin application  
 * @param modules - List of modules to unload
 */
fun unloadKoinModules(modules: List<Module>)

Usage Examples:

import org.koin.core.context.loadKoinModules
import org.koin.core.context.unloadKoinModules

// Load additional modules at runtime
fun enableFeature() {
    val featureModule = module {
        single<FeatureService> { FeatureServiceImpl() }
    }
    loadKoinModules(featureModule)
}

// Load multiple modules
fun loadPluginModules(plugins: List<Plugin>) {
    val pluginModules = plugins.map { plugin ->
        module {
            single { plugin.getService() }
        }
    }
    loadKoinModules(pluginModules)
}

// Unload modules when feature is disabled
fun disableFeature() {
    unloadKoinModules(featureModule)
}

KoinApplication Configuration

Configure the Koin application with modules, properties, and options.

class KoinApplication {
    /**
     * Get the Koin instance
     */
    val koin: Koin
    
    companion object {
        /**
         * Initialize new KoinApplication
         * @return KoinApplication instance
         */
        fun init(): KoinApplication
    }
    /**
     * Add modules to the application
     * @param modules - Variable number of Module instances
     * @return KoinApplication for chaining
     */
    fun modules(vararg modules: Module): KoinApplication
    
    /**
     * Add modules to the application
     * @param modules - List of Module instances
     * @return KoinApplication for chaining
     */
    fun modules(modules: List<Module>): KoinApplication
    
    /**
     * Set properties for the application
     * @param values - Map of property key-value pairs
     * @return KoinApplication for chaining
     */
    fun properties(values: Map<String, Any>): KoinApplication
    
    /**
     * Set custom logger for the application
     * @param logger - Logger instance
     * @return KoinApplication for chaining
     */
    fun logger(logger: Logger): KoinApplication
    
    /**
     * Enable console printing logger with specified level
     * @param level - Log level (DEBUG, INFO, WARNING, ERROR, NONE)
     * @return KoinApplication for chaining
     */
    fun printLogger(level: Level = Level.INFO): KoinApplication
    
    /**
     * Allow definition override (disabled by default)
     * @param override - Whether to allow overriding existing definitions
     */
    fun allowOverride(override: Boolean)
    
    /**
     * Create eager instances for definitions marked as createdAtStart
     */
    fun createEagerInstances()
    
    /**
     * Set options for the application
     * @param optionValue - Variable number of option pairs
     * @return KoinApplication for chaining
     */
    fun options(vararg optionValue: Pair<KoinOption, Any>): KoinApplication
    
    /**
     * Close the application and clean up resources
     */
    fun close()
    
    companion object {
        /**
         * Create a new KoinApplication instance
         * @return Empty KoinApplication ready for configuration
         */
        fun init(): KoinApplication
    }
}

Usage Examples:

import org.koin.core.KoinApplication
import org.koin.core.logger.Level
import org.koin.dsl.koinApplication

// Fluent configuration
val app = koinApplication {
    modules(coreModule, dataModule)
    properties(mapOf(
        "db.url" to "jdbc:postgresql://localhost/mydb",
        "api.timeout" to 30
    ))
    printLogger(Level.DEBUG)
    allowOverride(true)
    createEagerInstances()
}

// Programmatic configuration
val app = KoinApplication.init()
    .modules(coreModule)
    .logger(CustomLogger())
    .properties(loadProperties())
    .createEagerInstances()

// Close when done
app.close()

Application Factory Function

Create KoinApplication instances using DSL syntax.

/**
 * Create a KoinApplication instance with DSL configuration
 * @param createEagerInstances - Whether to create eager instances immediately
 * @param appDeclaration - Optional configuration block
 * @return Configured KoinApplication instance
 */
fun koinApplication(
    createEagerInstances: Boolean = true,
    appDeclaration: KoinAppDeclaration? = null
): KoinApplication

Usage Examples:

import org.koin.dsl.koinApplication

// Simple creation
val app = koinApplication {
    modules(myModule)
}

// With eager instance control
val app = koinApplication(createEagerInstances = false) {
    modules(myModule)
    printLogger()
}

// Just create empty application
val app = koinApplication(createEagerInstances = false)

Module Loading & Unloading

Dynamically load and unload modules in the global context.

/**
 * Load additional modules into the global Koin context
 * @param module - Single module to load
 */
fun loadKoinModules(module: Module)

/**
 * Load additional modules into the global Koin context
 * @param modules - List of modules to load
 */
fun loadKoinModules(modules: List<Module>)

/**
 * Unload modules from the global Koin context
 * @param module - Single module to unload
 */
fun unloadKoinModules(module: Module)

/**
 * Unload modules from the global Koin context
 * @param modules - List of modules to unload
 */
fun unloadKoinModules(modules: List<Module>)

Usage Examples:

import org.koin.core.context.loadKoinModules
import org.koin.core.context.unloadKoinModules

// Load single module
loadKoinModules(featureModule)

// Load multiple modules
loadKoinModules(listOf(featureAModule, featureBModule))

// Unload modules
unloadKoinModules(featureModule)
unloadKoinModules(listOf(featureAModule, featureBModule))

Types

typealias KoinAppDeclaration = KoinApplication.() -> Unit

enum class Level {
    DEBUG, INFO, WARNING, ERROR, NONE
}

abstract class Logger(val level: Level = Level.INFO) {
    abstract fun display(level: Level, msg: MESSAGE)
    fun debug(msg: MESSAGE)
    fun info(msg: MESSAGE) 
    fun warn(msg: MESSAGE)
    fun error(msg: MESSAGE)
    fun log(level: Level, msg: MESSAGE)
    fun isAt(level: Level): Boolean
}

typealias MESSAGE = String

class EmptyLogger : Logger(Level.NONE)

Install with Tessl CLI

npx tessl i tessl/maven-io-insert-koin--koin-core-jvm

docs

application-setup.md

component-integration.md

configuration-logging.md

constructor-reference.md

index.md

java-interop.md

module-definition.md

property-management.md

qualifiers-parameters.md

scope-management.md

tile.json