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) }
}