我发现如何使用以下代码在运行时解析通用接口。如何解析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)>);
答案 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>>>());