Autofac - 在运行时解析IEnumerable通用接口

时间:2011-08-03 16:19:27

标签: c# autofac

我发现如何使用以下代码在运行时解析通用接口。如何解析IGenericInterface<>的所有实例以在运行时返回集合。我知道在autofac中我们应该使用IEnumerable<T>但我不知道如何在下面的例子中表示:

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

这显然不起作用

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

1 个答案:

答案 0 :(得分:5)

您必须分两步构建通用IEnumerable类型。以下代码适用于我的机器;)

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>>>());