Core dependency injection framework for Kotlin multiplatform applications with DSL-based configuration and type-safe dependency resolution.
—
Reflection-free dependency injection using constructor references. Provides type-safe constructor resolution without runtime reflection overhead, enabling better performance and compile-time safety.
Define singleton instances using constructor references with full type safety and dependency resolution.
/**
* Create singleton instance using constructor reference (0 parameters)
* @param constructor - Constructor reference function
* @param options - Optional definition configuration
* @return KoinDefinition for the singleton
*/
inline fun <reified R> Module.singleOf(
crossinline constructor: () -> R,
noinline options: DefinitionOptions<R>? = null
): KoinDefinition<R>
/**
* Create singleton instance using constructor reference (1 parameter)
* @param constructor - Constructor reference function with 1 dependency
* @param options - Optional definition configuration
* @return KoinDefinition for the singleton
*/
inline fun <reified R, reified T1> Module.singleOf(
crossinline constructor: (T1) -> R,
noinline options: DefinitionOptions<R>? = null
): KoinDefinition<R>
/**
* Create singleton instance using constructor reference (2 parameters)
* @param constructor - Constructor reference function with 2 dependencies
* @param options - Optional definition configuration
* @return KoinDefinition for the singleton
*/
inline fun <reified R, reified T1, reified T2> Module.singleOf(
crossinline constructor: (T1, T2) -> R,
noinline options: DefinitionOptions<R>? = null
): KoinDefinition<R>Usage Examples:
import org.koin.dsl.module
import org.koin.core.module.dsl.singleOf
// Zero parameter constructor
class Logger
val appModule = module {
singleOf(::Logger)
}
// Single parameter constructor
class UserService(private val repository: UserRepository)
val serviceModule = module {
singleOf(::UserRepository)
singleOf(::UserService)
}
// Multiple parameter constructor
class NotificationService(
private val userService: UserService,
private val emailService: EmailService
)
val notificationModule = module {
singleOf(::UserService)
singleOf(::EmailService)
singleOf(::NotificationService)
}
// With options
class DatabaseConfig
val configModule = module {
singleOf(::DatabaseConfig) {
createdAtStart()
bind<ConfigurationInterface>()
}
}Define factory instances using constructor references for new instances on each injection.
/**
* Create factory instance using constructor reference (0 parameters)
* @param constructor - Constructor reference function
* @param options - Optional definition configuration
* @return KoinDefinition for the factory
*/
inline fun <reified R> Module.factoryOf(
crossinline constructor: () -> R,
noinline options: DefinitionOptions<R>? = null
): KoinDefinition<R>
/**
* Create factory instance using constructor reference (1 parameter)
* @param constructor - Constructor reference function with 1 dependency
* @param options - Optional definition configuration
* @return KoinDefinition for the factory
*/
inline fun <reified R, reified T1> Module.factoryOf(
crossinline constructor: (T1) -> R,
noinline options: DefinitionOptions<R>? = null
): KoinDefinition<R>
/**
* Create factory instance using constructor reference (2 parameters)
* @param constructor - Constructor reference function with 2 dependencies
* @param options - Optional definition configuration
* @return KoinDefinition for the factory
*/
inline fun <reified R, reified T1, reified T2> Module.factoryOf(
crossinline constructor: (T1, T2) -> R,
noinline options: DefinitionOptions<R>? = null
): KoinDefinition<R>Usage Examples:
import org.koin.dsl.module
import org.koin.core.module.dsl.factoryOf
// Request-scoped objects
class RequestContext
class RequestHandler(private val context: RequestContext)
val webModule = module {
factoryOf(::RequestContext)
factoryOf(::RequestHandler)
}
// Processing objects with dependencies
class DataProcessor(
private val validator: DataValidator,
private val transformer: DataTransformer
)
val processingModule = module {
singleOf(::DataValidator)
singleOf(::DataTransformer)
factoryOf(::DataProcessor)
}Direct constructor resolution for immediate instance creation within definitions.
/**
* Create new instance using constructor reference within a definition
* @param constructor - Constructor reference function
* @return New instance of type R
*/
inline fun <reified R> Scope.new(constructor: () -> R): R
/**
* Create new instance using constructor reference with 1 dependency
* @param constructor - Constructor reference function with 1 dependency
* @return New instance of type R
*/
inline fun <reified R, reified T1> Scope.new(constructor: (T1) -> R): R
/**
* Create new instance using constructor reference with 2 dependencies
* @param constructor - Constructor reference function with 2 dependencies
* @return New instance of type R
*/
inline fun <reified R, reified T1, reified T2> Scope.new(constructor: (T1, T2) -> R): RUsage Examples:
import org.koin.dsl.module
class DatabaseConnection(private val config: DatabaseConfig)
class ConnectionPool(connections: List<DatabaseConnection>)
val databaseModule = module {
single<DatabaseConfig> { DatabaseConfig() }
single<ConnectionPool> {
// Create multiple connections using new()
val connections = (1..5).map {
new(::DatabaseConnection)
}
ConnectionPool(connections)
}
}
// Complex object creation
class ComplexService(
private val dependency1: ServiceA,
private val dependency2: ServiceB,
private val helper: HelperClass
)
class HelperClass(private val config: Config)
val complexModule = module {
singleOf(::ServiceA)
singleOf(::ServiceB)
singleOf(::Config)
single<ComplexService> {
ComplexService(
get<ServiceA>(),
get<ServiceB>(),
new(::HelperClass) // Direct creation of helper
)
}
}typealias DefinitionOptions<T> = BeanDefinition<T>.() -> Unit
// Available options
fun BeanDefinition<*>.createdAtStart()
inline fun <reified T> BeanDefinition<out T>.bind()
fun BeanDefinition<*>.binds(classes: List<KClass<*>>)
fun BeanDefinition<*>.named(name: String)
inline fun <reified T> BeanDefinition<*>.named()
fun <T> BeanDefinition<T>.onClose(onClose: OnCloseCallback<T>)Install with Tessl CLI
npx tessl i tessl/maven-io-insert-koin--koin-core-jvm