Ich möchte in der Lage sein, eine generische Implementierung einer generischen Schnittstelle mit Guice injizieren.Injizieren Generische Implementierung mit Guice
Component.For(typeof(Repository<>)).ImplementedBy(typeof(MyRepository<>))
aber ich glaube nicht das Äquivalent in Guice existiert:
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
}
}
In C# Castle.Windsor verwenden, würde ich in der Lage to do sein. Ich weiß, dass ich in Guice TypeLiteral
verwenden kann, um einzelne Implementierungen zu registrieren, aber gibt es irgendeine Möglichkeit, sie alle auf einmal wie in Windsor zu registrieren?
Edit:
Hier ist ein Beispiel für die Nutzung:
Injector injector = Guice.createInjector(new MyModule());
Repository<Class1> repo1 = injector.getInstance(new Key<Repository<Class1>>() {});
Repository<Class2> repo2 = injector.getInstance(new Key<Repository<Class2>>() {});
Obwohl desto wahrscheinlicher Nutzung würde die Injektion in eine andere Klasse sein:
public class ClassThatUsesRepository {
private Repository<Class1> repository;
@Inject
public ClassThatUsesRepository(Repository<Class1> repository) {
this.repository = repository;
}
}
Könnten Sie zeigt einen Ausschnitt hinzufügen Wie würden Sie gerne _use_ das? –
Ich bin bei dir, ich möchte das Gleiche machen. Jeder sollte dieses Problem haben. Es muss etwas geben, was sie uns nicht sagen. :) – PapaFreud
Ich würde gerne die Lösung auch wissen, ich weiß nichts über C#, aber offensichtlich ist die C# -Wege viel moderner. – Mike