2010-02-24 13 views
7

Estoy actualizando el código de Autofac 1.4 a 2.1.10 Release Candidate.Registrar colecciones en Autofac 2.1.10 RC

Mi módulo de registro realizado previamente de esta manera:

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

Ahora, RegisterCollection no tiene ninguna sobrecarga sin parámetros. No me importa asignarle un nombre. Suponiendo que está bien para pasar justo a null, mi código es la siguiente con 2,1:

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

Sin embargo, cuando compilo, me sale el siguiente error con respecto a .MemberOf:

Utilizando el método genérico ' Autofac.RegistrationExtensions.MemberOf (Autofac.Builder.RegistrationBuilder, cadena)' requiere '3' argumentos de tipo

he intentado poner en una colección nombre en lugar de nulo, por las dudas, y eso no tuvo ningún efecto.

¿Cuál es la forma correcta de registrar colecciones en 2.1?

Respuesta

6

Según tengo entendido, usted solo registra un montón de tipos de IExceptionHandler, y luego cuando solicita un IEnumerable<IExceptionHandler> Autofac 2 se encargará de todo por usted.

Desde la página 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

Sí, eso es todo :) –

+1

No sé cómo me perdí en NewInV2. Gracias, eso parece funcionar. Me pregunto, sin embargo, cómo crearía una colección con nombre si * lo * deseaba. – HackedByChinese

Cuestiones relacionadas