new

inline fun <T> DirectDIAware.new(constructor: () -> T): T

Auto resolve a class dependencies by using its constructor reference. The resolution is done at compile time by leveraging inline functions, no reflection is required.

Example:

val myModule = DI.module("myModule") {
bindSingleton { new(::Foo) }
}

Thanks to Raman Gupta (https://gist.github.com/rocketraman) for its contribution


inline fun <T, P1> DirectDIAware.new(constructor: (P1) -> T): T
inline fun <T, P1, P2> DirectDIAware.new(constructor: (P1, P2) -> T): T
inline fun <T, P1, P2, P3> DirectDIAware.new(constructor: (P1, P2, P3) -> T): T
inline fun <T, P1, P2, P3, P4> DirectDIAware.new(constructor: (P1, P2, P3, P4) -> T): T
inline fun <T, P1, P2, P3, P4, P5> DirectDIAware.new(constructor: (P1, P2, P3, P4, P5) -> T): T
inline fun <T, P1, P2, P3, P4, P5, P6> DirectDIAware.new(constructor: (P1, P2, P3, P4, P5, P6) -> T): T
inline fun <T, P1, P2, P3, P4, P5, P6, P7> DirectDIAware.new(constructor: (P1, P2, P3, P4, P5, P6, P7) -> T): T
inline fun <T, P1, P2, P3, P4, P5, P6, P7, P8> DirectDIAware.new(constructor: (P1, P2, P3, P4, P5, P6, P7, P8) -> T): T
inline fun <T, P1, P2, P3, P4, P5, P6, P7, P8, P9> DirectDIAware.new(constructor: (P1, P2, P3, P4, P5, P6, P7, P8, P9) -> T): T
inline fun <T, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10> DirectDIAware.new(constructor: (P1, P2, P3, P4, P5, P6, P7, P8, P9, P10) -> T): T
inline fun <T, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11> DirectDIAware.new(constructor: (P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11) -> T): T
inline fun <T, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12> DirectDIAware.new(constructor: (P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12) -> T): T
inline fun <T, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13> DirectDIAware.new(constructor: (P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13) -> T): T
inline fun <T, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14> DirectDIAware.new(constructor: (P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14) -> T): T
inline fun <T, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15> DirectDIAware.new(constructor: (P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15) -> T): T
inline fun <T, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16> DirectDIAware.new(constructor: (P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16) -> T): T
inline fun <T, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17> DirectDIAware.new(constructor: (P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17) -> T): T
inline fun <T, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18> DirectDIAware.new(constructor: (P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18) -> T): T
inline fun <T, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19> DirectDIAware.new(constructor: (P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19) -> T): T
inline fun <T, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20> DirectDIAware.new(constructor: (P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20) -> T): T
inline fun <T, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21> DirectDIAware.new(constructor: (P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21) -> T): T
inline fun <T, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22> DirectDIAware.new(constructor: (P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22) -> T): T

See also


inline fun <T, A : Any> DirectDIAware.new(param: A, constructor: (A) -> T): T

This is a new factory function overload that takes a parameter param.

This function will try to merge instance calls used to retrieve graph dependencies with usages of your provided param.

  • This function will try to use the param once after which it will always inject dependencies from the graph. Make sure your parameter is declared only once in the target dependency constructor, unless you want to also inject it from the graph

  • This function will throw DI.UnusedParameterException if you never use the provided param.

  • On jvm, this function can correctly resolve inheritance hierarchies if provided param is a subclass of the parameter used in the constructor, but due to compiler limitations, this will only work on JVM! Avoid relying on inheritance when injecting parameters using this function.


inline fun <T, A : Any, P1, P2> DirectDIAware.new(param: A, constructor: (P1, P2) -> T): T
inline fun <T, A : Any, P1, P2, P3> DirectDIAware.new(param: A, constructor: (P1, P2, P3) -> T): T
inline fun <T, A : Any, P1, P2, P3, P4> DirectDIAware.new(param: A, constructor: (P1, P2, P3, P4) -> T): T
inline fun <T, A : Any, P1, P2, P3, P4, P5> DirectDIAware.new(param: A, constructor: (P1, P2, P3, P4, P5) -> T): T
inline fun <T, A : Any, P1, P2, P3, P4, P5, P6> DirectDIAware.new(param: A, constructor: (P1, P2, P3, P4, P5, P6) -> T): T
inline fun <T, A : Any, P1, P2, P3, P4, P5, P6, P7> DirectDIAware.new(param: A, constructor: (P1, P2, P3, P4, P5, P6, P7) -> T): T
inline fun <T, A : Any, P1, P2, P3, P4, P5, P6, P7, P8> DirectDIAware.new(param: A, constructor: (P1, P2, P3, P4, P5, P6, P7, P8) -> T): T
inline fun <T, A : Any, P1, P2, P3, P4, P5, P6, P7, P8, P9> DirectDIAware.new(param: A, constructor: (P1, P2, P3, P4, P5, P6, P7, P8, P9) -> T): T
inline fun <T, A : Any, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10> DirectDIAware.new(param: A, constructor: (P1, P2, P3, P4, P5, P6, P7, P8, P9, P10) -> T): T
inline fun <T, A : Any, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11> DirectDIAware.new(param: A, constructor: (P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11) -> T): T
inline fun <T, A : Any, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12> DirectDIAware.new(param: A, constructor: (P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12) -> T): T
inline fun <T, A : Any, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13> DirectDIAware.new(param: A, constructor: (P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13) -> T): T
inline fun <T, A : Any, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14> DirectDIAware.new(param: A, constructor: (P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14) -> T): T
inline fun <T, A : Any, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15> DirectDIAware.new(param: A, constructor: (P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15) -> T): T
inline fun <T, A : Any, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16> DirectDIAware.new(param: A, constructor: (P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16) -> T): T
inline fun <T, A : Any, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17> DirectDIAware.new(param: A, constructor: (P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17) -> T): T
inline fun <T, A : Any, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18> DirectDIAware.new(param: A, constructor: (P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18) -> T): T
inline fun <T, A : Any, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19> DirectDIAware.new(param: A, constructor: (P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19) -> T): T
inline fun <T, A : Any, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20> DirectDIAware.new(param: A, constructor: (P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20) -> T): T
inline fun <T, A : Any, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21> DirectDIAware.new(param: A, constructor: (P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21) -> T): T
inline fun <T, A : Any, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22> DirectDIAware.new(param: A, constructor: (P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P20, P21, P22) -> T): T

Please see parent new function documentation for more info.