Acabo de empezar a jugar con Guice, y un caso de uso que se me ocurre es que en una prueba solo quiero anular una sola encuadernación. Creo que me gustaría usar el resto de los enlaces de nivel de producción para garantizar que todo esté configurado correctamente y para evitar la duplicación.Encuadernación primaria en Guice
Así que imaginen Tengo el siguiente módulo
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);
}
}
Y en mi prueba sólo quiero anular InterfaceC, manteniendo InterfaceA y InterfaceB en el tacto, por lo que me gustaría algo así como:
Module testModule = new Module() {
public void configure(Binder binder) {
binder.bind(InterfaceC.class).to(MockC.class);
}
};
Guice.createInjector(new ProductionModule(), testModule);
también he intentado lo siguiente, sin suerte:
Module testModule = new ProductionModule() {
public void configure(Binder binder) {
super.configure(binder);
binder.bind(InterfaceC.class).to(MockC.class);
}
};
Guice.createInjector(testModule);
¿alguien sabe si es posible hacer lo que quiero o ¿estoy ladrando completamente el árbol equivocado?
--- Seguimiento: Parece que puedo lograr lo que quiero si utilizo la etiqueta @ImplementedBy en la interfaz y luego solo proporciono un enlace en el caso de prueba, que funciona bien cuando hay un 1-1 mapeo entre la interfaz y la implementación.
Además, después de discutir esto con un colega, parece que nos encaminamos por el camino de anular todo un módulo y asegurarnos de que tenemos nuestros módulos definidos correctamente. Esto parece que podría causar un problema, aunque un enlace se extravía en un módulo y necesita ser movido, por lo tanto, posiblemente se rompa una carga de pruebas ya que los enlaces ya no estarán disponibles para ser reemplazados.
Me gusta la frase "ladrar el árbol equivocado": D –