2010-02-24 37 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