Я хотел бы иметь возможность внедрить универсальную реализацию универсального интерфейса с помощью 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;
}
}