繁体   English   中英

Autofac注册错误:类型'System.Collections.IEnumerable'不是开放的通用类或接口类型

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM