Registrando coleções no Autofac 2.1.10 RC
-
22-09-2019 - |
Pergunta
Estou atualizando o código do Autofac 1.4 para 2.1.10 Candidato a liberação.
Meu módulo realizou anteriormente registro como este:
builder.RegisterCollection<IExceptionHandler>()
.As<IEnumerable<IExceptionHandler>>()
.FactoryScoped();
builder.Register<AspNetExceptionHandler>()
.As<IExceptionHandler>()
.MemberOf<IEnumerable<IExceptionHandler>>()
.FactoryScoped();
Agora, RegisterCollection
não tem sobrecarga sem parâmetros. Eu não me importo em atribuir um nome a ele. Supondo que não há problema em apenas passar null
, meu código se parece com isso em 2.1:
builder.RegisterCollection<IExceptionHandler>(null)
.As<IEnumerable<IExceptionHandler>>()
.InstancePerDependency();
builder.RegisterType<AspNetExceptionHandler>()
.As<IExceptionHandler>()
.MemberOf<IEnumerable<IExceptionHandler>>(null)
.InstancePerDependency();
No entanto, quando eu compilar, recebo o seguinte erro sobre .MemberOf
:
Usando o método genérico 'Autofac.RegistrationExtensions.Miberof (Autofac.builder.registrationBuilder, String)' requer '3' argumentos do tipo
Tentei colocar um nome de coleção em vez de nulo, por precaução, e isso não teve efeito.
Qual é a maneira correta de registrar coleções em 2.1?
Solução
Pelo que entendi, você apenas registra um monte de IExceptionHandler
tipos, e então quando você solicita um IEnumerable<IExceptionHandler>
O Autofac 2 apenas cuidará de tudo para você.
De Newinv2 página:
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());