Заметка: несколько реализаций, разные графы объектов
Как ты делаешь следующее в действии?
Есть класс XmlSerializer
это зависит от интерфейса XmlFormatter
, Есть 2 реализации XmlFormatter
: CompactXmlFormatter
а также PrettyXmlFormatter
,
Другой класс MyApplication
зависит от 2 случаев XmlSerializer
, Один экземпляр должен быть настроен с 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
,
1 ответ
Используйте обязательные аннотации, чтобы различать каждый 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 {}