我正在使用Kodein在Android上进行依赖注入(当然在Kotlin中),但我正在为一个方面而挣扎:我似乎无法将lambda作为一个论点传递给一个工厂。它编译正确,但在运行时失败(我认为Kodein是为了防止它)。
在我的应用程序类中,我执行以下绑定:
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:没有找到绑定()与?{?}的工厂 ..。绑定()与工厂{ Function0 -> SimpleButtonListener }
我对科特林还是很陌生的,所以我不知道我到底哪里出了问题。我所忽略的语言中是否有古怪的或成语,或者在兰巴达周围是否有科丁作为争论的限制?
发布于 2017-10-18 10:11:04
这是Kodein 4中的一个bug,在下一个版本的Kodein (5.0版)中进行了更正。
同时,以下是解决办法:
val clickListener : SimpleButtonListener by With(generic(), onClick).instance()抱歉太不方便了。
https://stackoverflow.com/questions/46805576
复制相似问题