Передача лямбда в качестве аргумента в кодеин
Я использую 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()
Извините за неудобства.