如何在Guice中绑定池(没有太多样板)?

时间:2013-02-08 14:56:34

标签: java scala dependency-injection guice pool

我有一个像这样的通用界面:

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模块中添加绑定语句。

为了清楚起见,我省略了注释。

1 个答案:

答案 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])