我正在将代码从Autofac 1.4升级到2.1.10 Release Candidate。
我的模块之前执行了如下注册:
builder.RegisterCollection<IExceptionHandler>()
.As<IEnumerable<IExceptionHandler>>()
.FactoryScoped();
builder.Register<AspNetExceptionHandler>()
.As<IExceptionHandler>()
.MemberOf<IEnumerable<IExceptionHandler>>()
.FactoryScoped();
现在,RegisterCollection
没有无参数过载。我不在乎给它命名。假设只传入null
即可,我的代码在2.1中显示如下:
builder.RegisterCollection<IExceptionHandler>(null)
.As<IEnumerable<IExceptionHandler>>()
.InstancePerDependency();
builder.RegisterType<AspNetExceptionHandler>()
.As<IExceptionHandler>()
.MemberOf<IEnumerable<IExceptionHandler>>(null)
.InstancePerDependency();
但是,当我编译时,我收到关于.MemberOf
的以下错误:
使用通用方法 “Autofac.RegistrationExtensions.MemberOf(Autofac.Builder.RegistrationBuilder, string)'需要'3'类型参数
我尝试输入集合名称而不是null,以防万一,这没有效果。
在2.1中注册馆藏的正确方法是什么?
答案 0 :(得分:6)
根据我的理解,您只需注册一堆IExceptionHandler
类型,然后当您申请IEnumerable<IExceptionHandler>
时,Autofac 2将为您处理所有事情。
来自NewInV2页面:
builder.RegisterType<A1>().As<IA>();
builder.RegisterType<A2>().As<IA>();
var container = builder.Build();
// Contains an instance of both A1 and A2
Assert.AreEqual(2, container.Resolve<IEnumerable<IA>>().Count());