我希望能够使用 Guice 注入泛型接口的通用实现。
在使用Castle.Windsor的C#中,我可以做到以下操作:点击这里。
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
}
}
在使用Castle.Windsor的C#中,我可以做到以下操作:点击这里。
Component.For(typeof(Repository<>)).ImplementedBy(typeof(MyRepository<>))
但我认为 Guice 中不存在相当的东西。我知道我可以在 Guice 中使用 TypeLiteral
注册单个实现,但是否有办法像 Windsor 一样将它们全部注册?
编辑:
这里是一个使用示例:
Injector injector = Guice.createInjector(new MyModule());
Repository<Class1> repo1 = injector.getInstance(new Key<Repository<Class1>>() {});
Repository<Class2> repo2 = injector.getInstance(new Key<Repository<Class2>>() {});
虽然更有可能的用法是将其注入到另一个类中:
public class ClassThatUsesRepository {
private Repository<Class1> repository;
@Inject
public ClassThatUsesRepository(Repository<Class1> repository) {
this.repository = repository;
}
}