Внедрение универсальной реализации с использованием Guice

Я хотел бы иметь возможность внедрить универсальную реализацию универсального интерфейса с помощью Guice.

public interface Repository {
  void save(T item);
  T get(int id);
}

public MyRepository implements Repository {
  @Override
  public void save(T item) {
    // do saving
    return item;
  }
  @Override
  public T get(int id) {
    // get item and return
  }
}

В C #, использующем Castle.Windsor, я мог бы сделать :

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

но я не думаю, что аналог существует в Guice. Я знаю, что могу использовать TypeLiteral в Guice для регистрации отдельных реализаций, но есть ли способ зарегистрировать их все сразу, как в Windsor?

Изменить:

Вот пример использования:

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

Хотя более вероятным использованием будет инъекция в другой класс:

public class ClassThatUsesRepository {
  private Repository repository;

  @Inject
  public ClassThatUsesRepository(Repository repository) {
    this.repository = repository;
  }
}

47
задан Jeff Axelrod 2 August 2012 в 19:50
поделиться