我正在使用Kodein在Android上进行依赖注入(当然是在Kotlin中),但我在一个方面苦苦挣扎:我似乎无法将lambda作为参数传递给工厂。它正确编译但在运行时失败(我认为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 - &gt; SimpleButtonListener}
我对Kotlin还不是很新,所以我不确定我到底出了什么问题。在我错过的语言中是否有一个怪癖或成语,或者Kodein是否以lambdas为参数进行限制?
答案 0 :(得分:3)
这是Kodein 4中的一个错误,在下一版Kodein(版本5.0)中已得到纠正。
同时,这是修复:
val clickListener : SimpleButtonListener by With(generic(), onClick).instance()
很抱歉给您带来不便。