将lambda作为Kodein中的参数传递

时间:2017-10-18 08:13:30

标签: android kotlin kodein

我正在使用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 - &gt; SimpleButtonListener}

我对Kotlin还不是很新,所以我不确定我到底出了什么问题。在我错过的语言中是否有一个怪癖或成语,或者Kodein是否以lambdas为参数进行限制?

1 个答案:

答案 0 :(得分:3)

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

同时,这是修复:

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

很抱歉给您带来不便。