2010-02-24 14 views
7

Sto aggiornando il codice da Autofac 1.4 a 2.1.10 Release Candidate.Registrazione di raccolte in Autofac 2.1.10 RC

mio modulo di registrazione precedentemente eseguita in questo modo:

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

Ora, RegisterCollection ha nessun sovraccarico senza parametri. Non mi interessa assegnare un nome. Supponendo che è OK per passare solo in null, il mio codice è simile al seguente punto 2.1:

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

Tuttavia, quando compilo, ottengo il seguente errore .MemberOf:

Utilizzando il metodo generico ' Autofac.RegistrationExtensions.MemberOf (Autofac.Builder.RegistrationBuilder, stringa)' richiede '3' argomenti di tipo

ho provato mettendo in una raccolta nome invece di null, nel caso in cui, e che non ha avuto alcun effetto.

Qual è il modo corretto di registrare raccolte in 2.1?

risposta

6

Come ho capito, è sufficiente registrare un gruppo di tipi IExceptionHandler, e quindi quando si richiede un IEnumerable<IExceptionHandler> Autofac 2 si prenderà cura di tutto per te.

Dalla pagina 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ì, questo è tutto :) –

+1

Non so come ho perso che in NewInV2. Grazie, sembra funzionare. Mi chiedo, tuttavia, come creerei una raccolta denominata se l'ho * voluto *. – HackedByChinese

Problemi correlati