7

我正在将代码从 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 中注册集合的正确方法是什么?

4

1 回答 1

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());
于 2010-02-24T22:19:04.567 回答