2010-02-24 38 views
7

我正在将代码从Autofac 1.4升级到2.1.10 Release Candidate。在Autofac 2.1.10中注册集合RC

我模块像这样预先进行报名时间:即日

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, 字符串)”需要 '3' 类型参数

我试着集合中放名称而不是null,以防万一,并且没有效果。

在2.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()); 
+0

没错,就是这样:) – 2010-02-24 23:11:45

+1

我不知道我怎么错过了上NewInV2。谢谢,这似乎工作。 但是,我仍然想知道如果我*想要如何创建一个命名集合。 – HackedByChinese 2010-02-25 06:02:33