我希望能夠使用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