Kotlin 如何为Kodein注入实例传递多个参数?
在科丹,我有下面的装订Kotlin 如何为Kodein注入实例传递多个参数?,kotlin,kodein,Kotlin,Kodein,在科丹,我有下面的装订 bind<AppDependent>() with multiton { title: String -> AppDependent(title, instance(), instance()) } 但是,如果我的绑定有多个参数,例如 bind<AppDependent>() with multiton { title: String, something: String ->
bind<AppDependent>() with multiton {
title: String -> AppDependent(title, instance(), instance())
}
但是,如果我的绑定有多个参数,例如
bind<AppDependent>() with multiton {
title: String, something: String -> AppDependent(title + something, instance(), instance())
}
bind()与multiton{
title:String,something:String->AppDependent(title+something,instance(),instance())
}
我如何实例化它?我看到在
instance()
函数中只有一个arg
。显然有M
作为参数的包装
private val appDependent: AppDependent by instance(arg = M("abc", "def"))
从中找到答案。在Kodein文档中找不到它们:(
参数最多可以达到5个,如中所述
就像工厂一样,多参数工厂可以接受多个(最多5个)参数。
在下一个版本中,多参数工厂将被弃用,因为这会让很多人感到困惑
我们建议改用数据类
,如:
data class DiceParamerters(val startNumber: Int, val sides: Int)
val kodein = Kodein {
bind<Dice>() with factory { params: DiceParameters -> RandomDice(params) }
}
数据类参数(val起始编号:Int,val边:Int)
val kodein=kodein{
使用工厂{params:DiceParameters->RandomDice(params)}绑定()
}
至于传递数据类,也就是说假设参数仅为可序列化数据,我假设?如果对于不可序列化的内容,那么我们必须返回到M
我猜。不,不需要序列化。6.5中不推荐使用M
,7.0中删除,您应该改用数据类
对我来说似乎很清楚,不知道是谁困惑了,为什么困惑了。但是,data
类比varargs有一个好处,我们可以为参数设置默认值。文档仍然说multiton
最多可以占用5个参数,不能用v7编译。OSS和文档,不要让我开始。这肯定是一个文档问题。data当您有多个参数时,建议使用class
。使用数据类的好处是,我们可以放置无限量的参数。否则,我们将不得不为绑定区域的N个参数编写N个实现。M
将在6.5中被弃用,并在7.0中被删除,您应该使用数据类Es
insteadPlus,multiton不回答您的问题。multiton是单例,具体取决于参数。
data class DiceParamerters(val startNumber: Int, val sides: Int)
val kodein = Kodein {
bind<Dice>() with factory { params: DiceParameters -> RandomDice(params) }
}