किसी कारण से मुझे कोडेन के साथ काम करने के लिए कंस्ट्रक्टर इंजेक्शन नहीं मिल रहा है।

अपवाद को पुन: उत्पन्न करने के लिए यह कोड है:

import org.kodein.di.Kodein
import org.kodein.di.direct
import org.kodein.di.generic.bind
import org.kodein.di.generic.instance
import org.kodein.di.generic.provider

fun main(args: Array<String>) {
    val kodein = Kodein {
        bind<Test2>() to provider { Test2() }
        bind<Test>() to provider { Test(instance()) }
    }

    val test = kodein.direct.instance<Test>()
}

class Test(val test2: Test2)
class Test2

अपवाद:

Exception in thread "main" org.kodein.di.Kodein$NotFoundException: No binding found for bind<Test>() with ? { ? }
Registered in this Kodein container:

    at org.kodein.di.internal.KodeinContainerImpl.factory(KodeinContainerImpl.kt:174)
    at org.kodein.di.KodeinContainer$DefaultImpls.factory$default(KodeinContainer.kt:33)
    at org.kodein.di.KodeinContainer$DefaultImpls.provider(KodeinContainer.kt:80)
    at org.kodein.di.internal.KodeinContainerImpl.provider(KodeinContainerImpl.kt:7)
    at org.kodein.di.KodeinContainer$DefaultImpls.provider$default(KodeinContainer.kt:79)
    at org.kodein.di.internal.DKodeinBaseImpl.Instance(DKodeinImpl.kt:33)
    at AppKt.main(App.kt:20)

यह काम क्यों नहीं करता?

0
Jan Wytze 5 अक्टूबर 2018, 23:20

1 उत्तर

सबसे बढ़िया उत्तर
bind<Test2>() to provider { Test2() }
              ^^

यह कोटलिन का to फ़ंक्शन है, जो एक Pair उत्पन्न करता है, कोडीन के DSL से कोई लेना-देना नहीं है: p

कोडीन का डीएसएल with का उपयोग करता है:

bind<Test2>() with provider { Test2() }
              ^^^^

ध्यान दें कि, जब आप किसी प्रकार को स्वयं के लिए बाध्य कर रहे हैं, तो आप एक सरल वाक्यविन्यास का उपयोग कर सकते हैं:

bind() from provider { Test2() }
0
Salomon BRYS 6 अक्टूबर 2018, 10:17