你如何在guice中做以下事情?
类XmlSerializer
取决于接口XmlFormatter
。
XmlFormatter
有两种实现:CompactXmlFormatter
和PrettyXmlFormatter
。
另一个班级MyApplication
取决于XmlSerializer
的2个实例。应使用CompactXmlFormatter
和另一个PrettyXmlFormatter
public class XmlSerializer {
public XmlSerializer(XmlFormatter formatter) {
...
}
}
public interface XmlFormatter {
...
}
public class CompactXmlFormatter implements XmlFormatter {
...
}
public class PrettyXmlFormatter implements XmlFormatter {
...
}
public class MyApplication {
public MyApplication(XmlSerializer compactSerializer, XmlSerializer prettySerializer) {
...
}
}
你如何构建这样的图表?
我知道,一旦你拥有2个XmlSerializer
个实例,将它们注入MyApplication
需要在MyApplication
构造函数的参数中注释。
我更感兴趣的是如何将XmlFormatter
绑定到CompactXmlFormatter
和PrettyXmlFormatter
。
答案 0 :(得分:0)
使用绑定注释来区分每个XmlFormatter
。
在Module
:
bind(XmlFormatter.class).aannotatedWith(Pretty.class)
.to(PrettyXmlFormatter.class);
bind(XmlFormatter.class).aannotatedWith(Compact.class)
.to(CompactXmlFormatter.class);
和
@Inject public MyApplication(
@Compact XmlSerializer compactSerializer,
@Pretty XmlSerializer prettySerializer) {
...
当然,您必须定义@Pretty
和@Compact
注释:
@BindingAnnotation
@Target({ FIELD, PARAMETER, METHOD })
@Retention(RUNTIME)
public @interface Pretty {}
@BindingAnnotation
@Target({ FIELD, PARAMETER, METHOD })
@Retention(RUNTIME)
public @interface Compact {}