Me gustaría poder aplicar una implementación genérica de una interfaz genérica usando Guice.Inyectar implementación genérica utilizando Guice
public interface Repository<T> {
void save(T item);
T get(int id);
}
public MyRepository<T> implements Repository<T> {
@Override
public void save(T item) {
// do saving
return item;
}
@Override
public T get(int id) {
// get item and return
}
}
En C# usando Castle.Windsor, me gustaría ser capaz to do:
Component.For(typeof(Repository<>)).ImplementedBy(typeof(MyRepository<>))
pero no creo que exista el equivalente en Guice. Sé que puedo usar TypeLiteral
en Guice para registrar implementaciones individuales, pero ¿hay alguna manera de registrarlas todas a la vez como en Windsor?
Editar:
Aquí hay un ejemplo de uso:
Injector injector = Guice.createInjector(new MyModule());
Repository<Class1> repo1 = injector.getInstance(new Key<Repository<Class1>>() {});
Repository<Class2> repo2 = injector.getInstance(new Key<Repository<Class2>>() {});
Aunque el uso más probable sería la inyección en otra clase:
public class ClassThatUsesRepository {
private Repository<Class1> repository;
@Inject
public ClassThatUsesRepository(Repository<Class1> repository) {
this.repository = repository;
}
}
Podría añadir un fragmento que muestra cómo lo haría me gusta _use_ esto? –
Estoy contigo, quiero hacer lo mismo. Todos deberían tener este problema. Debe haber algo que no nos dicen. :) – PapaFreud
Me gustaría saber la solución también, no sé nada de C#, pero obviamente el modo C# es mucho más moderno. – Mike