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?

Foi útil?

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());
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top