gpt4 book ai didi

Koin - 每个参数值的单个实例

转载 作者:行者123 更新时间:2023-12-04 10:59:13 25 4
gpt4 key购买 nike

我有一个模块:

single{ (name: String) -> Person(name) }

当我这样做时:

val alice: Person by inject {parametersOf("Alice")}
val bob: Person by inject {parametersOf("Bob")}

我有 2 个 Alice 实例。除第一个参数外的所有参数都将被忽略。

有没有一种简单的方法可以让 Koin 将这 2 个视为不同的?参数是事先不知道的,所以我不能使用命名属性。 factory 也不会,我需要重用具有相同参数集的实例。

最佳答案

在 Koin 中没有这样的东西,但是很容易制作这样的东西。

1) 如果不存在则创建的类:

class DistinctFactory<K, V>(private val newInstance: (K) -> V) {
private val _locker = Any()
private val mRepo: HashMap<K, V> = HashMap()

operator fun get(id: K): V {
return mRepo[id] ?: run {
synchronized(_locker) {
mRepo[id] ?: run {
newInstance(id).also {
mRepo[id] = it
}
}
}
}
}
}

2)DistinctFactory的合币单:

single { DistinctFactory<String, Person> { Person(it) } }

3)使用前单的Koin factory:

factory { (name: String) -> get<DistinctFactory<String, Person>>()[name] }

测试:

val alice: Person by inject {parametersOf("Alice")}
val bob: Person by inject {parametersOf("Bob")}
val aliceAgain: Person by inject {parametersOf("Alice")}

alice === aliceAgain

关于Koin - 每个参数值的单个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58943444/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com