Kodein工厂绑定抛出NotFoundException

时间:2017-10-11 13:01:34

标签: kotlin kodein

我不知道这是一个错误还是我做错了。我在文档中没有看到任何内容表明应该以除此之外的任何方式调用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 } 

2 个答案:

答案 0 :(得分:1)

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

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

在Kodein 4中,语法为kodein.with(5).instance()kodein.factory<Int, Dice>().invoke(5)

我目前正在开发Kodein 5(尚未发布版本),其中此语法将更改为kodein.instance(arg = 5)

答案 1 :(得分:0)

在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}")
}