CtrlK
BlogDocsLog inGet started
Tessl Logo

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

Koin Core is a pragmatic lightweight dependency injection framework for Kotlin Multiplatform with iOS Simulator ARM64 target support.

Pending
Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

SecuritybySnyk

Pending

The risk profile of this skill

Overview
Eval results
Files

Koin Core - Dependency Injection Framework

Koin Core is a pragmatic lightweight dependency injection framework for Kotlin Multiplatform applications with iOS Simulator ARM64 target support. It provides a simple DSL to declare your application components and manages their lifecycle automatically.

Overview

Koin Core offers several key capabilities for dependency injection:

  • Application Setup & Configuration - Initialize and configure your Koin context
  • Core Dependency Injection - Inject dependencies throughout your application
  • Module System & Definitions - Organize dependencies into reusable modules
  • Scope Management - Manage component lifecycles with scoped dependencies
  • Component Integration - Integrate DI into your classes with component interfaces
  • Qualifiers & Parameters - Distinguish between similar dependencies and pass parameters
  • Error Handling - Comprehensive exception system for DI failures

Quick Start

import org.koin.core.Koin
import org.koin.core.KoinApplication
import org.koin.dsl.*

// Define a module
val appModule = module {
    single<Repository> { DatabaseRepository() }
    factory<UseCase> { GetDataUseCase(get()) }
}

// Start Koin
val koinApp = koinApplication {
    modules(appModule)
}

// Get dependencies
val repository: Repository = koinApp.koin.get()

Application Setup & Configuration

Koin applications are configured using KoinApplication which provides the main entry point and configuration options.

Core Application Functions

// Create and configure a Koin application
fun koinApplication(
    createEagerInstances: Boolean = true, 
    appDeclaration: KoinAppDeclaration? = null
): KoinApplication

fun koinApplication(appDeclaration: KoinAppDeclaration?): KoinApplication
fun koinApplication(configuration: KoinConfiguration?): KoinApplication
fun koinApplication(createEagerInstances: Boolean): KoinApplication

// Type aliases
typealias KoinAppDeclaration = KoinApplication.() -> Unit

KoinApplication Class

class KoinApplication {
    val koin: Koin
    
    // Module management
    fun modules(modules: Module): KoinApplication
    fun modules(vararg modules: Module): KoinApplication
    fun modules(modules: List<Module>): KoinApplication
    
    // Configuration
    fun allowOverride(override: Boolean): Unit
    fun properties(values: Map<String, Any>): KoinApplication
    fun logger(logger: Logger): KoinApplication
    fun printLogger(level: Level = Level.INFO): KoinApplication
    fun options(vararg optionValue: Pair<KoinOption, Any>): KoinApplication
    
    // Lifecycle
    fun createEagerInstances(): Unit
    fun close(): Unit
    
    companion object {
        fun init(): KoinApplication
    }
}

Application Setup & Configuration

Core Dependency Injection

The Koin class provides the main dependency resolution and injection capabilities.

Primary Injection Methods

class Koin {
    // Direct resolution
    inline fun <reified T : Any> get(
        qualifier: Qualifier? = null,
        noinline parameters: ParametersDefinition? = null
    ): T
    
    // Lazy injection
    inline fun <reified T : Any> inject(
        qualifier: Qualifier? = null,
        mode: LazyThreadSafetyMode = KoinPlatformTools.defaultLazyMode(),
        noinline parameters: ParametersDefinition? = null
    ): Lazy<T>
    
    // Nullable variants
    inline fun <reified T : Any> getOrNull(/* ... */): T?
    inline fun <reified T : Any> injectOrNull(/* ... */): Lazy<T?>
    
    // Non-reified variants
    fun <T> get(clazz: KClass<*>, qualifier: Qualifier?, parameters: ParametersDefinition?): T
    fun <T> getOrNull(clazz: KClass<*>, qualifier: Qualifier?, parameters: ParametersDefinition?): T?
    
    // Collections
    inline fun <reified T> getAll(): List<T>
    
    // Instance declaration
    inline fun <reified T> declare(
        instance: T,
        qualifier: Qualifier? = null,
        secondaryTypes: List<KClass<*>> = emptyList(),
        allowOverride: Boolean = true
    )
    
    // Property management
    fun <T : Any> getProperty(key: String, defaultValue: T): T
    fun <T : Any> getProperty(key: String): T?
    fun setProperty(key: String, value: Any)
    fun deleteProperty(key: String)
    
    // Scope management
    fun deleteScope(scopeId: ScopeID)
    fun getScopeOrNull(scopeId: ScopeID): Scope?
    
    // Module management
    fun loadModules(modules: List<Module>, allowOverride: Boolean = true, createEagerInstances: Boolean = false)
    fun unloadModules(modules: List<Module>)
}

Core Dependency Injection

Module System & Definitions

Modules organize your dependencies using a simple DSL for defining singletons, factories, and scoped instances.

Module Creation

// Create module
fun module(createdAtStart: Boolean = false, moduleDeclaration: ModuleDeclaration): Module

typealias ModuleDeclaration = Module.() -> Unit

Definition DSL

class Module {
    val id: String
    val isLoaded: Boolean
    var eagerInstances: LinkedHashSet<SingleInstanceFactory<*>>
    
    // Core definitions
    inline fun <reified T> single(
        qualifier: Qualifier? = null,
        createdAtStart: Boolean = false,
        definition: Definition<T>
    ): KoinDefinition<T>
    
    inline fun <reified T> factory(
        qualifier: Qualifier? = null,
        definition: Definition<T>
    ): KoinDefinition<T>
    
    // Scope definitions  
    fun scope(qualifier: Qualifier, scopeSet: ScopeDSL.() -> Unit)
    inline fun <reified T> scope(scopeSet: ScopeDSL.() -> Unit)
    
    // Module composition
    fun includes(vararg module: Module)
    fun includes(module: Collection<Module>)
    operator fun plus(module: Module): List<Module>
}

// Type aliases
typealias Definition<T> = Scope.(ParametersHolder) -> T

Module System & Definitions

Scope Management

Scopes provide lifecycle management for dependencies, allowing you to create and destroy sets of related instances.

Scope Class

class Scope {
    val scopeQualifier: Qualifier
    val id: ScopeID
    val isRoot: Boolean
    val closed: Boolean
    
    // Resolution methods
    inline fun <reified T : Any> inject(/* ... */): Lazy<T>
    inline fun <reified T : Any> get(/* ... */): T
    inline fun <reified T : Any> getAll(): List<T>
    
    // Scope operations
    fun linkTo(vararg scopes: Scope)
    fun unlink(vararg scopes: Scope)
    fun close()
}

typealias ScopeID = String

Scope DSL

class ScopeDSL {
    inline fun <reified T> scoped(
        qualifier: Qualifier? = null,
        definition: Definition<T>
    ): KoinDefinition<T>
    
    inline fun <reified T> factory(
        qualifier: Qualifier? = null,
        definition: Definition<T>
    ): KoinDefinition<T>
}

Scope Management

Component Integration

Component interfaces provide automatic dependency injection capabilities to your classes.

Core Component Interfaces

interface KoinComponent {
    fun getKoin(): Koin
}

interface KoinScopeComponent : KoinComponent {
    val scope: Scope
}

// Extension functions for KoinComponent
inline fun <reified T : Any> KoinComponent.get(/* ... */): T
inline fun <reified T : Any> KoinComponent.inject(/* ... */): Lazy<T>

// Extension functions for KoinScopeComponent  
fun <T : Any> T.getScopeId(): String
fun <T : Any> T.getScopeName(): TypeQualifier
fun <T : KoinScopeComponent> T.createScope(/* ... */): Scope

Component Integration

Qualifiers & Parameters

Qualifiers distinguish between different instances of the same type, while parameters allow passing runtime values during injection.

Qualifier System

interface Qualifier {
    val value: QualifierValue
}

typealias QualifierValue = String

// Qualifier creation functions
fun named(name: String): StringQualifier
fun <E : Enum<E>> named(enum: Enum<E>): Qualifier
fun qualifier(name: String): StringQualifier
inline fun <reified T> named(): TypeQualifier
fun _q(name: String): StringQualifier

// Qualifier implementations
class StringQualifier : Qualifier
class TypeQualifier : Qualifier

Parameter System

class ParametersHolder {
    val values: List<Any?>
    var index: Int
    
    // Access methods
    operator fun <T> get(i: Int): T
    inline fun <reified T : Any> get(): T
    inline operator fun <reified T> component1(): T // through component5()
    
    // Utility methods
    fun size(): Int
    fun isEmpty(): Boolean
    fun add(value: Any): ParametersHolder
}

// Parameter creation functions
fun parametersOf(vararg parameters: Any?): ParametersHolder
fun emptyParametersHolder(): ParametersHolder

typealias ParametersDefinition = () -> ParametersHolder

Qualifiers & Parameters

Error Handling

Koin provides comprehensive exception handling for dependency injection failures.

Core Exception Types

// Resolution failures
class NoDefinitionFoundException : RuntimeException
class InstanceCreationException : RuntimeException
class NoParameterFoundException : RuntimeException

// Scope failures  
class ClosedScopeException : RuntimeException
class ScopeNotCreatedException : RuntimeException
class ScopeAlreadyCreatedException : RuntimeException
class NoScopeDefFoundException : RuntimeException
class MissingScopeValueException : RuntimeException

// Configuration failures
class DefinitionOverrideException : RuntimeException
class DefinitionParameterException : RuntimeException
class MissingPropertyException : RuntimeException
class NoPropertyFileFoundException : RuntimeException
class KoinApplicationAlreadyStartedException : RuntimeException

Error Handling

Platform Integration

// Platform-specific utilities
object KoinPlatformTools {
    fun defaultLazyMode(): LazyThreadSafetyMode
    fun generateId(): String
}

// Thread-local storage
expect class ThreadLocal<T>

// Time utilities  
class KoinPlatformTimeTools

This comprehensive framework enables clean, testable dependency injection across your Kotlin Multiplatform applications with minimal boilerplate and maximum flexibility.

Workspace
tessl
Visibility
Public
Created
Last updated
Describes
mavenpkg:maven/io.insert-koin/koin-core-iossimulatorarm64@4.1.x
Publish Source
CLI
Badge
tessl/maven-io-insert-koin--koin-core-iossimulatorarm64 badge