我有一个像这样的通用界面:
trait Thing {
...
}
这样的实现:
class ThingA extends Thing {
...
}
class ThingB extends Thing {
...
}
在运行时确定使用哪一个,因此池配置为提供正确的池:
class Things(a: ThingA, b: ThingB) {
addThing(a)
addThing(b)
def getThing(x: String) = { ... }
}
如何在未明确将其添加到构造函数的情况下将所有已配置的Thing
提供给ThingPool?
同样,我想做以下事情:
class Things(pool: ThingPool) {
addThingsFromPool(pool)
def getThing(x: String) = { ... }
}
...其中ThingPool
所有Thing
都没有明确要求它们。
...或,ThingPool
可以是List[Thing]
。
当前状态需要两次其他修改才能添加Thing
。我想谈谈我需要做的就是在我的Guice模块中添加绑定语句。
为了清楚起见,我省略了注释。
答案 0 :(得分:1)
您似乎正在寻找Multibinding扩展程序:http://code.google.com/p/google-guice/wiki/Multibindings
val thingBinder = Multibinder.newSetBinder(binder(), classOf[Thing])
thingBinder.addBinding().to(classOf[ThingA])
thingBinder.addBinding().to(classOf[ThingA])
然后使用它
class Things(pool:Set[Thing])