在 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()
抱歉给您带来不便。
我正在使用 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()
抱歉给您带来不便。