2017-10-18 68 views
1

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

在我的应用类中,我做了以下绑定:

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}

我还是很新的科特林,所以我不记得我在哪里出了问题。在我错过的语言中是否有古怪或习惯用法,或者是否有围绕lambda作为参数的Kodein限制?

回答

2

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

与此同时,这里是修复:

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

对不起,inconvenicence。