Pergunta

Estou adicionando o Autofac a um projeto existente e algumas das implementações de serviço exigem que seu método inicialize seja chamado e aprovado informações de configuração. Atualmente estou usando o código:

builder.Register(context =>
                 {
                    var service = 
                         new SqlTaxRateProvider(context.Resolve<IUserProvider>());
                    service.Initialize(config);
                    return service;
                 }
).As<ITaxService>()
.SingleInstance();

O que funciona, mas ainda estou criando o objeto, que é o que estou tentando me afastar disso e permitir que o Autofac lida com isso para mim. É possível configurar uma operação de criação de postagem que realizaria a inicialização personalizada?

Para lhe dar uma idéia do que estou depois, esse seria o código:

builder.RegisterType<SqlTaxRateProvider>()
 .As<ITaxService>()
 .OnCreated(service=> service.Initialize(config))
 .SingleInstance();

ATUALIZAÇÃO: Estou usando o Autofac-2.1.10.754-NET35

Foi útil?

Solução

.OnActivating(e => e.Instance.Initialize(...))

deve fazer o truque.

Você também pode investigar o módulo iniciado (veja o Entrada iniciante no Wiki Autofac).

A sugestão de Mark de fazer a inicialização no construtor também é boa. Nesse caso, use

.WithParameter(new NamedParameter("config", config))

Para mesclar o parâmetro de configuração com as outras dependências do construtor.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top