Injecter Générique de la mise en Œuvre à l'aide de Guice

Je voudrais être capable d'injecter un générique de la mise en œuvre d'une interface générique à l'aide de 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# à l'aide de Château.Windsor, je serais capable faire:

Component.For(typeof(Repository<>)).ImplementedBy(typeof(MyRepository<>))

mais je ne pense pas que l'équivalent existe dans Guice. Je sais que je peux utiliser TypeLiteral dans Guice d'enregistrer certaines implémentations, mais est-il possible de s'inscrire tout à la fois comme à Windsor?

Edit:

Voici un exemple d'utilisation:

Injector injector = Guice.createInjector(new MyModule());
Repository<Class1> repo1 = injector.getInstance(new Key<Repository<Class1>>() {});
Repository<Class2> repo2 = injector.getInstance(new Key<Repository<Class2>>() {});

Bien que le plus probable d'utilisation serait injection dans une autre classe:

public class ClassThatUsesRepository {
  private Repository<Class1> repository;

  @Inject
  public ClassThatUsesRepository(Repository<Class1> repository) {
    this.repository = repository;
  }
}
  • Pourriez-vous ajouter un extrait de code montrant comment vous voulez utiliser cette fonction?
  • Je suis avec vous, je veux faire la même chose. Tout le monde devrait avoir ce problème. Il doit y avoir quelque chose qu'ils ne nous racontent pas. 🙂
  • Je voudrais savoir la solution, je ne sais rien à propos de C#, mais évident que le C# manière est beaucoup plus moderne.
  • Toujours pas de solution ? Répéter les liaisons de toutes les valeurs génériques est une perte de temps. Sûr que dans certains cas, vous pourriez réellement envie d'une mise en œuvre différente, mais il ne devrait pas être la valeur par défaut.