Передача лямбда в качестве аргумента в кодеин

Я использую Kodein для внедрения зависимостей в Android (конечно, в Kotlin), но я борюсь с одним аспектом: я не могу передать лямбду в качестве аргумента фабрике. Он компилируется правильно, но не работает во время выполнения (что-то, что я, как Kodein как средство защиты от).

В моем классе Application я делаю следующее связывание:

class MyApplication : Application(), KodeinAware {
    override val kodein by Kodein.lazy {
        ...
        bind<SimpleButtonListener>() with factory { func: () -> Unit -> SimpleButtonListener(func) }
    }
}

В своей деятельности я вызываю это так:

val onClick = { startActivity(EmailIntent()) }
val clickListener : SimpleButtonListener by with(onClick).instance()

Я также попытался это безуспешно:

val clickListener : SimpleButtonListener by with({ startActivity(EmailIntent()) }).instance()

Но у меня всегда возникает одна и та же проблема:

com.github.salomonbrys.kodein.Kodein $ NotFoundException: фабрика для bind() не найдена с? {? }
... bind() с фабрикой { Function0 -> SimpleButtonListener }

Я все еще довольно новичок в Kotlin, поэтому я не уверен, где именно я ошибся. Есть ли в языке, который я пропустил, причуды или идиомы, или есть ограничение Кодеина вокруг лямбд в качестве аргументов?

1 ответ

Решение

Это ошибка в Kodein 4, которая исправлена ​​в следующей версии Kodein (версия 5.0).

В то же время, вот исправление:

val clickListener : SimpleButtonListener by With(generic(), onClick).instance()

Извините за неудобства.

Другие вопросы по тегам