我正在使用Kodein在Android上进行依赖项注入(inject)(当然是在Kotlin中),但是我在一个方面苦苦挣扎:我似乎无法将lambda作为参数传递给工厂。它可以正确编译,但在运行时会失败(尽管我可以通过Kodein进行保护)。
在我的Application类中,执行以下绑定(bind):
class MyApplication : Application(), KodeinAware {
override val kodein by Kodein.lazy {
...
bind<SimpleButtonListener>() with factory { func: () -> Unit -> SimpleButtonListener(func) }
}
}
在我的 Activity 中,我这样调用它:
val onClick = { startActivity(EmailIntent()) }
val clickListener : SimpleButtonListener by with(onClick).instance()
我也尝试失败了:
val clickListener : SimpleButtonListener by with({ startActivity(EmailIntent()) }).instance()
但是当我运行时,总是会遇到相同的问题:
我对Kotlin还是很陌生,所以我不确定我哪里出了问题。我想念的语言是否有古怪的事物或成语,或者Kodein是否以lambdas为参数受到限制?
最佳答案
这是Kodein 4中的一个错误,该错误在下一版本的Kodein(5.0版)中已得到纠正。
同时,这里是解决方法:
val clickListener : SimpleButtonListener by With(generic(), onClick).instance()
不便之处,敬请原谅。