dave08
05/30/2018, 1:27 PMbind<ProgressNotifier>() with factory { id: Int, iconRes: Int, title: String ->
ProgressNotifierImpl(instance(), id, iconRes, title)
}
bind() from singleton { InstallationNotifier(factory() as ((Int,Int,String) -> ProgressNotifier)) }
But idea tells me that type inference failed for A
on factory()
call in the InstallationNotifier
constructor... how could I acheive this? the constructor takes: val progressNotifierFactory: (id: Int, iconRes: Int, title: String) -> ProgressNotifier
Andreas Sinz
05/30/2018, 2:13 PMfactory
what type of Factory you want, try InstallationNotifier(factory<(Int, Int, String) -> ProgressNotifier>())
Andreas Sinz
05/30/2018, 2:20 PMInstallationNotifier(factory())
dave08
05/30/2018, 3:05 PMAndreas Sinz
05/30/2018, 3:07 PMdave08
05/30/2018, 3:07 PMAndreas Sinz
05/30/2018, 3:07 PMdave08
05/30/2018, 3:08 PMAndreas Sinz
05/30/2018, 3:12 PMdave08
05/30/2018, 3:14 PMdave08
05/30/2018, 3:15 PMdave08
05/30/2018, 3:16 PMdave08
05/30/2018, 3:16 PMAndreas Sinz
05/30/2018, 3:17 PMdave08
05/30/2018, 3:17 PMinline fun <reified A, reified T : Any> DKodein.factory(tag: Any? = null)
Andreas Sinz
05/30/2018, 3:18 PMdave08
05/30/2018, 3:19 PMdave08
05/30/2018, 4:12 PMdave08
05/30/2018, 4:13 PMinline fun <C, reified A1, reified A2, reified A3, reified T: Any> Kodein.BindBuilder.WithContext<C>.factory(noinline creator: BindingKodein<C>.(A1, A2, A3) -> T)
Andreas Sinz
05/30/2018, 4:24 PMfactory<Multi3<Int, Int, String>, ProgressNotifier>()
dave08
05/30/2018, 4:28 PMAndreas Sinz
05/30/2018, 4:33 PMAndreas Sinz
05/30/2018, 4:33 PMdata class
instead of 3 argumentsdave08
05/30/2018, 4:34 PMsalomonbrys
05/30/2018, 5:08 PMdave08
05/30/2018, 5:09 PMsalomonbrys
05/30/2018, 5:09 PMMultiX
argumentsalomonbrys
05/30/2018, 5:10 PMfactory() as (Multi3<Int,Int,String>) -> ProgressNotifier
salomonbrys
05/30/2018, 5:13 PMfactory
function parameters, you need to give all parameters (the argument and the return type) : `factory<Multi3<Int,Int,String>,ProgressNotifier>()dave08
05/30/2018, 5:13 PMsalomonbrys
05/30/2018, 5:13 PMsalomonbrys
05/30/2018, 5:24 PMdave08
05/30/2018, 5:25 PMsalomonbrys
05/30/2018, 5:25 PMsalomonbrys
05/30/2018, 5:25 PMimport org.kodein.di.*
inline fun <reified A1, reified A2, reified A3, reified T : Any> DKodein.factory3(tag: Any? = null): ((A1, A2, A3) -> T) {
val f = Factory<Multi3<A1, A2, A3>, T>(generic(), generic(), tag)
return { a1, a2, a3 -> f(Multi3(a1, a2, a3, generic())) }
}
salomonbrys
05/30/2018, 5:26 PMbind() from singleton { InstallationNotifier(factory3()) }
salomonbrys
05/30/2018, 5:27 PMKodein
as well as DKodein
and for 2 to 5 parameters in next release πsalomonbrys
05/30/2018, 5:27 PMdave08
05/30/2018, 5:28 PMProcess: com.lomdaat.coreservices.kosherstore, PID: 27116
java.lang.ClassCastException: libcore.reflect.TypeVariableImpl cannot be cast to java.lang.Class
at org.kodein.di.ParameterizedTypeToken.getRawType(types.kt:177)
at org.kodein.di.ParameterizedTypeToken.getRaw(types.kt:202)
at org.kodein.di.TypeToken$DefaultImpls.isAssignableFrom(typeToken.kt:82)
at org.kodein.di.JVMTypeToken.isAssignableFrom(types.kt:143)
at org.kodein.di.ClassTypeToken.isAssignableFrom(types.kt:302)
at org.kodein.di.TypeToken$DefaultImpls.isAssignableFrom(typeToken.kt:89)
at org.kodein.di.JVMTypeToken.isAssignableFrom(types.kt:143)
at org.kodein.di.internal.TypeChecker$Down.check(KodeinTreeImpl.kt:12)
at org.kodein.di.internal.KodeinTreeImpl$findBySpecs$3.invoke(KodeinTreeImpl.kt:71)
at org.kodein.di.internal.KodeinTreeImpl$findBySpecs$3.invoke(KodeinTreeImpl.kt:28)
at kotlin.sequences.FilteringSequence$iterator$1.calcNext(Sequences.kt:110)
at kotlin.sequences.FilteringSequence$iterator$1.hasNext(Sequences.kt:133)
at kotlin.sequences.FlatteningSequence$iterator$1.ensureItemIterator(Sequences.kt:249)
at kotlin.sequences.FlatteningSequence$iterator$1.hasNext(Sequences.kt:241)
at kotlin.sequences.FilteringSequence$iterator$1.calcNext(Sequences.kt:108)
at kotlin.sequences.FilteringSequence$iterator$1.hasNext(Sequences.kt:133)
at kotlin.sequences.TransformingSequence$iterator$1.hasNext(Sequences.kt:153)
at kotlin.sequences.SequencesKt___SequencesKt.toCollection(_Sequences.kt:654)
at kotlin.sequences.SequencesKt___SequencesKt.toMutableList(_Sequences.kt:684)
at kotlin.sequences.SequencesKt___SequencesKt.toList(_Sequences.kt:675)
at org.kodein.di.internal.KodeinTreeImpl.findBySpecs(KodeinTreeImpl.kt:81)
at org.kodein.di.internal.KodeinTreeImpl.find(KodeinTreeImpl.kt:99)
at org.kodein.di.KodeinTree$DefaultImpls.find$default(KodeinTree.kt:32)
at org.kodein.di.internal.KodeinContainerImpl.factory(KodeinContainerImpl.kt:146)
at org.kodein.di.KodeinContainer$DefaultImpls.factory$default(KodeinContainer.kt:33)
at org.kodein.di.internal.DKodeinBaseImpl.Factory(DKodeinImpl.kt:21)
at org.kodein.di.internal.BindingKodeinImpl.Factory(KodeinImpl.kt)
at org.kodein.di.bindings.BindingKodeinContextWrap.Factory(standardBindings.kt)
at org.kodein.di.bindings.NoArgBindingKodeinWrap.Factory(BindingKodein.kt)
dave08
05/30/2018, 5:29 PMsalomonbrys
05/30/2018, 5:31 PMdave08
05/30/2018, 5:32 PMdave08
05/31/2018, 10:29 AMsalomonbrys
05/31/2018, 10:33 AMsalomonbrys
05/31/2018, 10:33 AMinline fun <reified A1, reified A2, reified A3> multi3Generic() = generic<Multi3<A1, A2, A3>>()
fun main(args: Array<String>) {
println(generic<Multi3<String, String, Int>>().simpleDispString())
// Multi3<String, String, Int>
println(multi3Generic<String, String, Int>().simpleDispString())
// Multi3<A1, A2, A3>
}
salomonbrys
05/31/2018, 10:34 AMsalomonbrys
05/31/2018, 10:34 AMsalomonbrys
05/31/2018, 10:34 AMdave08
05/31/2018, 10:37 AM