我希望能够使用Guice注入通用接口的通用实现。使用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
}
}
在使用Castle.Windsor C#,我就能to do:
Component.For(typeof(Repository<>)).ImplementedBy(typeof(MyRepository<>))
,但我不认为相当于吉斯存在。我知道我可以在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;
}
}
您可以加入一个片段显示你将如何喜欢用这个? – 2010-11-21 16:51:59
我和你在一起,我想要做同样的事情。每个人都应该有这个问题。一定有一些他们没有告诉我们的东西。 :) – PapaFreud 2011-03-22 10:18:44
我也想知道解决方案,我对C#一无所知,但显然C#方式更现代化。 – Mike 2012-03-01 13:02:35