Я только начал играть с Guice, и случай использования, о котором я могу думать, заключается в том, что в тесте я просто хочу переопределить одно привязку. Я думаю, что я хотел бы использовать остальную привязку уровня производительности, чтобы все было правильно настроено и чтобы избежать дублирования.
Итак, представьте, что у меня есть следующий модуль
public class ProductionModule implements Module {
public void configure(Binder binder) {
binder.bind(InterfaceA.class).to(ConcreteA.class);
binder.bind(InterfaceB.class).to(ConcreteB.class);
binder.bind(InterfaceC.class).to(ConcreteC.class);
}
}
И в моем тесте я только хочу переопределить интерфейс, сохраняя InterfaceA и InterfaceB тактично, поэтому мне нужно что-то вроде:
Module testModule = new Module() {
public void configure(Binder binder) {
binder.bind(InterfaceC.class).to(MockC.class);
}
};
Guice.createInjector(new ProductionModule(), testModule);
Я также пробовал следующее, без везения:
Module testModule = new ProductionModule() {
public void configure(Binder binder) {
super.configure(binder);
binder.bind(InterfaceC.class).to(MockC.class);
}
};
Guice.createInjector(testModule);
Кто-нибудь знает, можно ли делать то, что я хочу, или я полностью лаю на неправильном дереве?
--- Последующие действия: Казалось бы, я могу добиться того, что хочу, если я использую тег @ImplementedBy на интерфейсе, а затем просто предоставил привязку в тестовом примере, которая хорошо работает, когда есть сопоставление 1-1 между интерфейсом и реализацией.
Кроме того, обсудив это с коллегой, казалось бы, мы отправимся в путь переопределения всего модуля и обеспечения правильности определения наших модулей. Похоже, что это может вызвать проблему, хотя привязка привязана к модулю и должна быть перемещена, что может привести к поломке нагрузок тестов, поскольку привязки могут перестать быть доступными для переопределения.