1

我正在使用 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 作为参数的限制?

4

1 回答 1

3

这是 Kodein 4 中的一个错误,已在 Kodein 的下一版本(5.0 版)中得到纠正。

同时,这里是修复:

val clickListener : SimpleButtonListener by With(generic(), onClick).instance()

很抱歉给您带来不便。

于 2017-10-18T10:11:04.313 回答