Intereting Posts
Какой законный способ получить аннотации к чистому качеству Котлина через отражение, они всегда отсутствуют? Карта Mybatis COALESCE (int, 0) на java.lang.Long Ссылки функций и лямбда Объединение Java с Kotlin в Android Заполненная модель с дополнительным ответом с использованием Rx Как настроить динамические опорные точки для поворота анимации TornadoFx: Что делает лучше FXML или type-CSS Таймер сбой с KotlinNullPointerException внутри фрагмента «Невозможно преобразовать объект типа java.lang.String в тип com.android.projectrc.Listing» при использовании Firebase RecyclerAdapter Почему некоторые методы настройки Java автоматически становятся свойствами Kotlin, а некоторые нет? getChildFragmentManager () не найден в kotlin При использовании setcontentview в BottomsheetDialog возникает ошибка, например: «ни одна из следующих функций не может быть вызвана с предоставленными аргументами» Kapt3: java.io.File не может быть добавлен в java.lang.String Почему переменные Kotlin Pair не изменяются? Внедрение интерфейса с параметризованной функцией

Заводские привязки Kodein бросают 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 } 

Вы никогда не должны писать 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) .