在Autofac 2.1.10 RC中注册集合

时间:2010-02-24 21:16:05

标签: 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();

现在,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中注册馆藏的正确方法是什么?

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());