在 Kodein 中传递 lambda 作为参数

Passing lambda as argument in Kodein

我正在使用 Kodein 在 Android 上进行依赖注入(当然是在 Kotlin 中),但我在一个方面苦苦挣扎:我似乎无法将 lambda 作为参数传递给工厂。它编译正确但在 运行 时失败(我认为 Kodein 是为了防止这种情况)。

在我的应用程序 class 中,我执行以下绑定:

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()

但是当我 运行:

时我总是遇到同样的问题

com.github.salomonbrys.kodein.Kodein$NotFoundException: No factory found for bind() with ? { ? }
... bind() with factory { Function0 -> SimpleButtonListener }

我对 Kotlin 还是很陌生,所以我不确定到底哪里出了问题。我错过了语言中的怪癖或习语,还是 Kodein 对 lambda 作为参数有限制?

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

与此同时,这是解决方法:

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

抱歉给您带来不便。