Guiceを使用してジェネリックインタフェースのジェネリックインプリメンテーションをインジェクトできるようにしたいと考えています。 Castle.Windsorを使ってC#で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
}
}
、私はto doことができるだろう:
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;
}
}
あなたはどのようにあなたが希望を示すスニペットを追加することができます_use_これは好きですか? –
私はあなたと一緒にいる、私は同じことをしたい。誰もがこの問題を抱えているはずです。彼らが私たちに言っていないものがなければならない。 :) – PapaFreud
私は解決策も知っていますが、私はC#については何も知っていませんが、明らかにC#の方がずっと現代的です。 – Mike