Personalizando o registro do controlador Autofac
-
23-09-2019 - |
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.
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