【问题标题】:Kodein factory bindings is throwing NotFoundExceptionKodein 工厂绑定正在抛出 NotFoundException
【发布时间】:2017-10-11 13:01:33
【问题描述】:

我不知道这是一个错误还是我做错了。我在文档中看不到任何内容表明应该以除此之外的任何方式调用 kodein 工厂绑定:

class KodeinConfidenceTest {
    @Test
    fun testThatKodeinWorks() {
        val kodein = Kodein {
            bind<Dice>() with factory { sides: Int -> RandomDice(sides) }
        }
        val d:Dice = kodein.instance(5)
    }
}
open class Dice
data class RandomDice(val sides:Int) : Dice()

...但这会导致 NotFoundException

com.github.salomonbrys.kodein.Kodein$NotFoundException: No provider found for bind<Dice>("5") with ? { ? }
Registered in Kodein:
    bind<Dice>() with factory { Int -> RandomDice } 

【问题讨论】:

    标签: kotlin kodein


    【解决方案1】:

    你不应该写kodein.instance(5),你应该写kodein.instance(tag = 5)

    现在你看到了你的错误。您正在设置标签(区分绑定),而不是工厂的参数。

    在 Kodein 4 中,语法为 kodein.with(5).instance()kodein.factory&lt;Int, Dice&gt;().invoke(5)

    我目前正在开发 Kodein 5(还没有发布计划),其中的语法将更改为 kodein.instance(arg = 5)

    【讨论】:

      【解决方案2】:

      接受的答案在 Kodein 5 (5.3.0) 中对我不起作用。下面做了。

      class Die(val sides: Int)
      
      fun main(args: Array<String>) {
        val kodein = Kodein {
          bind<Die>() with factory { sides: Int -> Die(sides) }
        }
        val die: Die by kodein.instance { 20 }
        println("Sides ${die.sides}")
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-10-19
        • 1970-01-01
        • 2011-07-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-02
        相关资源
        最近更新 更多