[英]The non-generic type 'System.Collections.IEnumerable' cannot be used with type arguments
[英]Autofac registration error: The type 'System.Collections.IEnumerable' is not an open generic class or interface type
我尝试向IPage<>
注册IPage<>
接口,但是它总是抛出以下异常:
类型“ System.Collections.IEnumerable”不是开放的通用类或接口类型。
这是我的代码:
containerBuilder.RegisterAssemblyTypes(assembly)
.Where(t => t.IsAssignableFrom(typeof(IList<>)))
.AsSelf()
.AsImplementedInterfaces();
我的界面和实现:
public interface IPage<T> : IList<T>
{
}
public interface Page<T> : List<T>, IPage<T>
{
}
您能帮助我理解为什么会发生这种情况以及如何解决吗?
IList<T>
继承自IEnumerable
。 在您的类型上调用.AsImplementedInterfaces()
就像调用.AsImplementedInterfaces()
.As<IList<T>>().As<IPage>().As<IEnumerable<T>>().As<ICollection<T>>().As<IEnumerable>()
我不确切知道为什么,但是Autofac尝试将IEnumerable
注册为封闭类型,但失败。
如果要解析IPage<T>
,则不必使用.AsImplementedInterfaces()
注册类型, .AsImplementedInterfaces()
必须将其注册为封闭类型:
builder.RegisterAssemblyTypes(assembly)
.AsClosedTypesOf(typeof(IPage<>));
然后,当您解析IPage<Customer>
, Autofac将为您提供Page<Customer>
实例
尝试这样的事情:
builder.RegisterAssemblyTypes(assembly).AsClosedTypesOf(typeof(IList<>));
AsClosedTypesOf
指定如果扫描的程序集实现关闭提供的打开的通用接口类型的接口,则将注册该程序集的类型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.