如果在Guice中有多个实现,请绑定默认实现

时间:2019-01-03 22:48:07

标签: java dependency-injection guice

我的类层次结构如下:

interface Pen{}

class SimplePen implements Pen{}

class ComplexPen implements Pen{}

使用它的代码如下

class A{
  public A(Pen pen){}
} 

class B{
  public B(ComplexPen pen){}
} 

所以我想做的是,默认情况下,Pen应该绑定到SimplePen,而ComplexPen应该仅在明确询问时才绑定,例如B类。

bind(Pen.class).to(SimplePen.class).in(Singleton.class)
bind(ComplexPen.class)

上面的Guice配置在运行时失败,提示implementation of Pen already bound。我该怎么办?

请注意,我正在尝试避免使用.annotatedWith(Names.named("complexPen"))

1 个答案:

答案 0 :(得分:0)

糟糕,我提供的代码有效。我有一些额外的代码正在创建更多的绑定。

bind(Pen.class).to(SimplePen.class).in(Singleton.class)
bind(ComplexPen.class)