Autofac Resolve<;IEnumerable<;T>>;()返回空列表

本文关键字:gt lt 列表 返回 Resolve IEnumerable Autofac | 更新日期: 2023-09-27 18:20:07

我读了很多Autofac文档/wiki,这些文档表明我可以通过做如下所示的简单操作来获得所有注册类型的列表:

var builder = new ContainerBuilder();
builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly())
                .AssignableTo<IPersistedModel>();
var container = builder.Build();
var allTypes = container.Resolve<IEnumerable<IPersistedModel>>();

问题是所有类型都是空的。

在调试器中,我可以看到容器内部有7个匹配的类型,甚至还有一个IPersistedModel数组。。。但它们不会在Resolve()上返回。

我错过了什么?

Autofac Resolve<;IEnumerable<;T>>;()返回空列表

您需要使用.As<IPersistedModel>()或使用.AsImplementedInterfaces():为其所有接口注册类型作为接口

builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly())
            .AssignableTo<IPersistedModel>()
            .AsImplementedInterfaces();