0

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

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在不将其显式添加到构造函数的情况下将所有配置的 s 提供给 ThingPool?

如,我想做以下事情:

class Things(pool: ThingPool) {
  addThingsFromPool(pool)

  def getThing(x: String) = { ... }
}

...在没有明确要求的情况下,ThingPool所有s 都在哪里。Thing

...或者,ThingPool可能是一个List[Thing].

当前的状态需要两次额外的编辑才能添加Thing. 我想达到我需要做的就是在我的 Guice 模块中添加绑定语句的地步。

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

4

1 回答 1

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])
于 2013-02-09T13:19:42.277 回答