2010-02-24 13 views
7

Autofac 1.4'den 2.1.10 Sürüm Adayı'na yükseltiyorum. BöyleAutofac 2.1.10'daki Koleksiyonları Kaydediliyor RC

Benim modül daha önce gerçekleştirilen kayıt:

builder.RegisterCollection<IExceptionHandler>() 
       .As<IEnumerable<IExceptionHandler>>() 
       .FactoryScoped(); 
builder.Register<AspNetExceptionHandler>() 
       .As<IExceptionHandler>() 
       .MemberOf<IEnumerable<IExceptionHandler>>() 
       .FactoryScoped(); 

Şimdi RegisterCollection hiçbir parametresiz aşırı vardır. Bir isim vermekle ilgilenmiyorum. sadece null geçmek Tamam varsayarsak, benim kod 2.1'de şuna benzer:

builder.RegisterCollection<IExceptionHandler>(null) 
       .As<IEnumerable<IExceptionHandler>>() 
       .InstancePerDependency(); 
builder.RegisterType<AspNetExceptionHandler>() 
       .As<IExceptionHandler>() 
       .MemberOf<IEnumerable<IExceptionHandler>>(null) 
       .InstancePerDependency(); 

Ancak, ben derleme yaparken, aşağıdaki .MemberOf ilgili hatayı alıyorum: jenerik yöntem 'kullanma

Autofac.RegistrationExtensions.MemberOf (Autofac.Builder.RegistrationBuilder, string) bir koleksiyonunda koyarak çalıştı 3 'tür argümanlar

' gerektirir' Sadece null yerine isim, ve hiçbir etkisi olmamıştır.

Koleksiyonları 2.1'e kaydetmenin uygun yolu nedir?

cevap

6

Anladığım kadarıyla, sadece bir grup IExceptionHandler kayıt ve daha sonra bir IEnumerable<IExceptionHandler> Autofac 2 isteğinde bulunduğunuzda yalnızca sizin için her şeyi halledeceksiniz. NewInV2 sayfasından

:

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

Evet, işte bu :) –

+1

ben NewInV2 o cevapsız bilmiyorum. Teşekkürler, işe yarıyor. Yine de merak ettiğim bir koleksiyonun nasıl yaratılacağını merak ettim. – HackedByChinese