我已经阅读了很多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()时返回。
我错过了什么?

最佳答案

您需要将类型注册为接口,可以使用.As<IPersistedModel>()注册,也可以使用.AsImplementedInterfaces()注册其所有接口:

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

09-25 19:31