在Autofac 2.1.10 RC中注册集合

Hac*_*ese 7 autofac

我正在将代码从Autofac 1.4升级到2.1.10 Release Candidate.

我的模块之前执行了如下注册:

builder.RegisterCollection<IExceptionHandler>()
                .As<IEnumerable<IExceptionHandler>>()
                .FactoryScoped();
builder.Register<AspNetExceptionHandler>()
                .As<IExceptionHandler>()
                .MemberOf<IEnumerable<IExceptionHandler>>()
                .FactoryScoped();
Run Code Online (Sandbox Code Playgroud)

现在,RegisterCollection没有无参数过载.我不在乎给它命名.假设可以传入null,我的代码在2.1中看起来像这样:

builder.RegisterCollection<IExceptionHandler>(null)
                .As<IEnumerable<IExceptionHandler>>()
                .InstancePerDependency();
builder.RegisterType<AspNetExceptionHandler>()
                .As<IExceptionHandler>()
                .MemberOf<IEnumerable<IExceptionHandler>>(null)
                .InstancePerDependency();
Run Code Online (Sandbox Code Playgroud)

但是,当我编译时,我得到以下错误.MemberOf:

使用泛型方法'Autofac.RegistrationExtensions.MemberOf(Autofac.Builder.RegistrationBuilder,string)'需要'3'类型参数

我尝试输入集合名称而不是null,以防万一,这没有效果.

在2.1中注册集合的正确方法是什么?

Joe*_*ler 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());
Run Code Online (Sandbox Code Playgroud)