我正在使用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()

不便之处,敬请原谅。

07-28 04:08