我正在使用 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 -> SimpleButtonListener }
我对 Kotlin 还是很陌生,所以我不确定我到底哪里出错了。我错过的语言中是否存在怪癖或习语,或者 Kodein 是否存在围绕 lambdas 作为参数的限制?