Я только начал играть с 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);
}
}
И в моем тесте я хочу только переопределить InterfaceC, сохраняя при этом 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 в интерфейсе, а затем просто предоставлю привязку в тестовом примере, который отлично работает, когда между интерфейс и реализация.
Кроме того, после обсуждения этого с коллегой кажется, что мы пойдем по пути переопределения всего модуля и обеспечения правильного определения наших модулей. Похоже, что это может вызвать проблему, если привязка неуместна в модуле и ее нужно переместить, что может нарушить нагрузку на тесты, поскольку привязки больше не могут быть доступны для переопределения.