Кодеин заводской привязки выбрасывает NotFoundException

Я не знаю, если это ошибка или я просто делаю это неправильно. Я не вижу ничего в документации, которая говорит, что фабричные привязки 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 ответа

Решение

Вы никогда не должны писать kodein.instance(5), ты должен написать kodein.instance(tag = 5)

Теперь вы видите свою ошибку. Вы устанавливаете тег (который различает привязки), а не аргумент к фабрике.

В Кодейне 4 синтаксис kodein.with(5).instance() или же kodein.factory<Int, Dice>().invoke(5)

В настоящее время я занимаюсь разработкой Kodein 5 (еще не выпущен выпуск), в котором этот синтаксис будет изменен на kodein.instance(arg = 5),

Принятый ответ не работал для меня в Кодейне 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}")
}
Другие вопросы по тегам