【问题标题】:Passing lambda as argument in Kodein在 Kodein 中将 lambda 作为参数传递
【发布时间】:2017-10-18 08:13:29
【问题描述】:

我在 Android 上使用 Kodein 进行依赖注入(当然是在 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 是否存在围绕 lambda 作为参数的限制?

【问题讨论】:

    标签: android kotlin kodein


    【解决方案1】:

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

    与此同时,这里是修复:

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

    很抱歉给您带来不便。

    【讨论】:

      猜你喜欢
      • 2018-10-26
      • 1970-01-01
      • 1970-01-01
      • 2017-06-14
      • 2016-04-21
      • 2016-07-19
      • 1970-01-01
      • 2011-12-24
      • 1970-01-01
      相关资源
      最近更新 更多