package dev.inmo.micro_utils.koin import org.koin.core.parameter.ParametersDefinition import org.koin.core.qualifier.Qualifier import org.koin.java.KoinJavaComponent import kotlin.reflect.KClass fun lazyInject( kClassFactory: () -> KClass<*>, qualifier: Qualifier? = null, parameters: ParametersDefinition? = null ): Lazy { return lazy(LazyThreadSafetyMode.SYNCHRONIZED) { KoinJavaComponent.get(kClassFactory().java, qualifier, parameters) } } fun lazyInject( kClass: KClass<*>, qualifier: Qualifier? = null, parameters: ParametersDefinition? = null ): Lazy = lazyInject({ kClass }, qualifier, parameters) inline fun lazyInject( qualifier: Qualifier? = null, noinline parameters: ParametersDefinition? = null ): Lazy = lazyInject(T::class, qualifier, parameters)