2011-08-03 12 views
3

実行時に以下のコードを使用して汎用インタフェースを解決する方法を知りました。実行時にコレクションを取り戻すには、すべてのインスタンスIGenericInterface<>を解決するにはどうすればよいでしょうか。私はautofacに我々はIEnumerable<T>を使用することになっている知っているが、私は以下の例であることを表現する方法がわからない:これは明らかにAutofac - 実行時にIEnumerable汎用インタフェースを解決する

var typeInRuntime = typeof (SubClass1); 
var collection = container 
       .Resolve(IEnumerable<typeof(IGenericInterface<>) 
       .MakeGenericType(typeInRuntime)>); 

答えて

5

動作しない

var typeInRuntime = typeof (SubClass1); 
var instance1 = container.Resolve(typeof(IGenericInterface<>) 
          .MakeGenericType(typeInRuntime)); 

あなたはジェネリックを構築する必要がIEnumerableを2ステップで入力します。次のコードは私のマシン上で動作します;)

var t1 = typeof (IGenericInterface<>).MakeGenericType(typeof(SubClass1)); 
var t2 = typeof(IEnumerable<>).MakeGenericType(t1); 
var collection = c.Resolve(t2); 

Assert.That(collection, Is.InstanceOf<IEnumerable<IGenericInterface<SubClass1>>>()); 
+1

その時点でどのようなSubClass1が存在するのか分かりません。のように、私はそのインタフェースを実装するすべての型を解決したいと思います。私は基本的にSubClass1、SubClass2、SubClass3が何であるかを調べる必要があります。 – Casey

+0

@Caseyあなたの問題を解決しましたか? – dariogriffo

関連する問題