Então o Autofac nos permite selecionar qual construtor usar caso o tipo concreto registrado tenha múltiplos candidatos. É explicado aqui - https://autofac.readthedocs.io/en/latest/advanced/constructor-selection.html#iconstructorselector
Mas e se eu quiser usar meu seletor de construtor personalizado para cada registro do qual tenho bastante (milhares em várias centenas de Autofac.Module
classes)? Como posso alterar o padrão sem personalizar explicitamente cada registro?
Motivação
Temos um aplicativo .NET Framework muito grande usando MEF como IoC. Queremos substituí-lo pelo Autofac como uma etapa preliminar antes de migrar para o .NET Core.
Existe o Autofac.Mef, mas ele não suporta injeção Lazy ou de genéricos abertos, conforme a documentação aqui - https://autofac.readthedocs.io/en/latest/integration/mef.html#known-issues-gotchas
Portanto, migraremos para o Autofac propriamente dito. Já escrevi um código que inspeciona o contêiner MEF criado e gera o respectivo código de registro do Autofac. Mas há um problema - e se o Autofac selecionar um construtor diferente do MEF? Ou seja, não aquele atribuído com [ImportingConstructor]
?
Portanto, eu gostaria de poder personalizar o código de registro para respeitar o atributo, pelo menos por enquanto, para reduzir o risco de regressão. Claro, já que o código é gerado de qualquer forma, eu posso modificar todo e qualquer registro. Mas eu me pergunto se há uma maneira melhor.