Pergunta

Estou tentando usar o Autofac e o Autofac.Integrações.Web para registrar os controladores ASP.NET MVC. Atualmente, estou usando a digitalização de montagem para encontrar os controladores, mas um deles precisa de um parâmetro especial que eu prefiro passar. Abaixo estão os registros que tentei.

var builder = new ContainerBuilder();

builder.RegisterControllers(Assembly.GetExecutingAssembly());

// so far I have tried
builder.Register<SpecialController>(c =>
   new SpecialController(wierdParam, c.Resolve<IDependency>())
).Named<SpecialController>("controller.special")
.As<SpecialController>().As<IController>();            

/* And this
builder.Register<SpecialController>(c => 
    new SpecialController(url, c.Resolve<IDependency>())
);            
*/

/* plus this
builder.Register<SpecialController>(c =>
   new SpecialController(url, c.Resolve<IDependency>())
).Named<SpecialController>("controller.special");            
*/

Obrigado pela ajuda.

Foi útil?

Solução

Consegui encontrar um registro que funcionou depois de mexer e mexer com o depurador.

var builder = new ContainerBuilder();            

builder.RegisterControllers(Assembly.GetExecutingAssembly());

builder.Register<IController>(c =>
    new SpecialController(weirdParam, c.Resolve<IDependency>())
).Named<IController>("controller.special");

Isso funciona porque o Autofac registra automaticamente diferentes controladores como registros nomeados ocultos do tipo IController.

Outras dicas

tente usar o parâmetro se você quiser passar por qualquer objeto de classe

Por exemplo:

builder.RegisterType<ApplicationSettingsRepository>().As<IApplicationSettingsRepository>()
            .WithParameter(new TypedParameter(typeof(NameValueCollection), ConfigurationManager.AppSettings))
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top