DI

interface DI : DIAware

KOtlin DEpendency INjection.

To construct a DI instance, simply use it's block constructor and define your bindings in it :

val di = DI {
bind<Dice>() with factory { sides: Int -> RandomDice(sides) }
bind<DataSource>() with singleton { SqliteDS.open("path/to/file") }
bind<Random>() with provider { SecureRandom() }
constant("answer") with "forty-two"
}

Types

Link copied to clipboard
interface BindBuilder<C : Any>

Base builder DSL interface that allows to define scoped and context bindings.

Link copied to clipboard

Allows for the DSL inside the block argument of the constructor of DI and DI.Module.

Link copied to clipboard
object Companion
Link copied to clipboard

Exception thrown when there is a dependency loop.

Link copied to clipboard
annotation class DIDsl

Defines a di DSL function

Link copied to clipboard
data class Key<in C : Any, in A, out T : Any>(val contextType: TypeToken<in C>, val argType: TypeToken<in A>, val type: TypeToken<out T>, val tag: Any?)

In DI, each DIBinding is bound to a Key. A Key holds all information necessary to retrieve a factory (and therefore an instance).

Link copied to clipboard

Builder to create a DI object.

Link copied to clipboard
data class Module(val allowSilentOverride: Boolean = false, val prefix: String = "", val init: DI.Builder.() -> Unit)

A module is constructed the same way as in DI is:

Link copied to clipboard
class NoResultException(val search: SearchSpecs, message: String) : RuntimeException

Exception thrown when searching for bindings and none could be found.

Link copied to clipboard
class NotFoundException(val key: DI.Key<*, *, *>, message: String) : RuntimeException

Exception thrown when asked for a dependency that cannot be found.

Link copied to clipboard

Exception thrown when there is an overriding error.

Properties

Link copied to clipboard
abstract val container: DIContainer

Every methods eventually ends up to a call to this container.

Link copied to clipboard
open override val di: DI

A DI Aware class must be within reach of a DI object.

Link copied to clipboard
open val diContext: DIContext<*>

A DI Aware class can define a context that is for all retrieval by overriding this property.

Link copied to clipboard
open val diTrigger: DITrigger?

Trigger to use that define when the retrieval will be done.

Inheritors

Link copied to clipboard
Link copied to clipboard

Extensions

Link copied to clipboard
inline fun <A : Any, T : Any> DIAware.allFactories(tag: Any? = null): LazyDelegate<List<(A) -> T>>

Gets all factories that match the the given argument type, return type and tag.

Link copied to clipboard
inline fun <T : Any> DIAware.allInstances(tag: Any? = null): LazyDelegate<List<T>>

Gets all instances from providers that match the the given return type and tag.

inline fun <A : Any, T : Any> DIAware.allInstances(tag: Any? = null, arg: A): LazyDelegate<List<T>>
inline fun <A, T : Any> DIAware.allInstances(tag: Any? = null, arg: Typed<A>): LazyDelegate<List<T>>
inline fun <A : Any, T : Any> DIAware.allInstances(tag: Any? = null, noinline fArg: () -> A): LazyDelegate<List<T>>

Gets all instances from providers that match the the given return type and tag, curried from factories that take an argument A.

Link copied to clipboard
inline fun <T : Any> DIAware.allProviders(tag: Any? = null): LazyDelegate<List<() -> T>>

Gets all providers that match the the given return type and tag.

inline fun <A : Any, T : Any> DIAware.allProviders(tag: Any? = null, arg: A): LazyDelegate<List<() -> T>>
inline fun <A, T : Any> DIAware.allProviders(tag: Any? = null, arg: Typed<A>): LazyDelegate<List<() -> T>>
inline fun <A : Any, T : Any> DIAware.allProviders(tag: Any? = null, noinline fArg: () -> A): LazyDelegate<List<() -> T>>

Gets all providers that match the the given return type and tag, curried from factories that take an argument A.

Link copied to clipboard
inline fun <T : Any> DIAware.constant(): LazyDelegate<T>

Gets a constant of type T and tag whose tag is the name of the receiving property.

Link copied to clipboard

Return a direct DirectDI instance, with its receiver and context set to this DIAware receiver and context.

Link copied to clipboard
inline fun <A : Any, T : Any> DIAware.factory(tag: Any? = null): LazyDelegate<(A) -> T>

Gets a factory of T for the given argument type, return type and tag.

Link copied to clipboard
inline fun <A : Any, T : Any> DIAware.factoryOrNull(tag: Any? = null): LazyDelegate<(A) -> T?>

Gets a factory of T for the given argument type, return type and tag, or nul if none is found.

Link copied to clipboard
inline fun <A : Any, T : Any> DI.hasFactory(tag: Any? = null): Boolean

Define whether a factory binding exists in the given DI container

Link copied to clipboard
inline fun <T : Any> DI.hasProvider(tag: Any? = null): Boolean

Define whether a provider binding exists in the given DI container

Link copied to clipboard
inline fun <T : Any> DIAware.instance(tag: Any? = null): LazyDelegate<T>

Gets an instance of T for the given type and tag.

inline fun <A : Any, T : Any> DIAware.instance(tag: Any? = null, arg: A): LazyDelegate<T>
inline fun <A, T : Any> DIAware.instance(tag: Any? = null, arg: Typed<A>): LazyDelegate<T>
inline fun <A : Any, T : Any> DIAware.instance(tag: Any? = null, noinline fArg: () -> A): LazyDelegate<T>

Gets an instance of T for the given type and tag, curried from a factory that takes an argument A.

Link copied to clipboard
inline fun <T : Any> DIAware.instanceOrNull(tag: Any? = null): LazyDelegate<T?>

Gets an instance of T for the given type and tag, or null if none is found.

inline fun <A : Any, T : Any> DIAware.instanceOrNull(tag: Any? = null, arg: A): LazyDelegate<T?>
inline fun <A, T : Any> DIAware.instanceOrNull(tag: Any? = null, arg: Typed<A>): LazyDelegate<T?>
inline fun <A : Any, T : Any> DIAware.instanceOrNull(tag: Any? = null, noinline fArg: () -> A): LazyDelegate<T?>

Gets an instance of T for the given type and tag, curried from a factory that takes an argument A, or null if none is found.

Link copied to clipboard

Allows to get factories / providers / instances with a tag set to the name of the receiving property.

Link copied to clipboard
fun <T> DIAware.newInstance(creator: DirectDI.() -> T): LazyDelegate<T>

Allows to create a new instance of an unbound object with the same API as when bounding one.

Link copied to clipboard
inline fun <C : Any> DIAware.on(context: C, trigger: DITrigger? = this.diTrigger): DI
inline fun <C : Any> DIAware.on(trigger: DITrigger? = this.diTrigger, crossinline getContext: () -> C): DI

Allows to create a new DI object with a context and/or a trigger set.

fun DIAware.on(trigger: DITrigger?): DI

Allows to create a new DI object with a trigger set.

Link copied to clipboard
inline fun <T : Any> DIAware.provider(tag: Any? = null): LazyDelegate<() -> T>

Gets a provider of T for the given type and tag.

inline fun <A : Any, T : Any> DIAware.provider(tag: Any? = null, arg: A): LazyDelegate<() -> T>
inline fun <A, T : Any> DIAware.provider(tag: Any? = null, arg: Typed<A>): LazyDelegate<() -> T>
inline fun <A : Any, T : Any> DIAware.provider(tag: Any? = null, noinline fArg: () -> A): LazyDelegate<() -> T>

Gets a provider of T for the given type and tag, curried from a factory that takes an argument A.

Link copied to clipboard
inline fun <T : Any> DIAware.providerOrNull(tag: Any? = null): LazyDelegate<() -> T?>

Gets a provider of T for the given type and tag, or null if none is found.

inline fun <A : Any, T : Any> DIAware.providerOrNull(tag: Any? = null, arg: A): LazyDelegate<() -> T?>
inline fun <A, T : Any> DIAware.providerOrNull(tag: Any? = null, arg: Typed<A>): LazyDelegate<() -> T?>
inline fun <A : Any, T : Any> DIAware.providerOrNull(tag: Any? = null, noinline fArg: () -> A): LazyDelegate<() -> T?>

Gets a provider of T for the given type and tag, curried from a factory that takes an argument A, or null if none is found.