Tipos de middleware com vários construtores
Anteriormente, quando um tipo de middleware com vários construtores satisfatórios era instanciado a partir do contêiner de injeção de dependência, era usado aquele com mais parâmetros. Agora isso só acontece se o contêiner de injeção de IServiceProviderIsServicedependência implementar . Se isso não acontecer, uma exceção será lançada em tempo de execução.
Versão introduzida
.NET 9 RC 1
Comportamento anterior
Anteriormente, o primeiro dos dois construtores seguintes era preferido (quando ambos estavam satisfeitos) porque tem mais parâmetros.
public class CookiePolicyMiddleware
{
public CookiePolicyMiddleware(RequestDelegate next, IOptions<CookiePolicyOptions> options, ILoggerFactory factory)
{
// ...
}
public CookiePolicyMiddleware(RequestDelegate next, IOptions<CookiePolicyOptions> options)
{
// ...
}
}
Novo comportamento
A partir do .NET 9, nenhum construtor é preferido e a construção falha com um erro como:
System.InvalidOperationException: 'Vários construtores aceitando todos os tipos de argumento fornecidos foram encontrados no tipo 'Microsoft.AspNetCore.CookiePolicy.CookiePolicyMiddleware'. Só deve haver um construtor aplicável.»
Tipo de mudança de rutura
Esta mudança é uma mudança comportamental.
Razão para a alteração
O mecanismo de ativação foi alterado para ajudar a suportar a injeção de dependência com chave.
Ação recomendada
Se isso acontecer e você não puder atualizar para um contêiner de injeção de dependência que implementa IServiceProviderIsServiceo , você poderá adicionar o ActivatorUtilitiesConstructorAttribute ao construtor preferencial do tipo de middleware afetado.
APIs afetadas
Essa alteração é conhecida por causar erros ao instanciar Microsoft.AspNetCore.CookiePolicy.CookiePolicyMiddleware com Autofac.Extensions.DependencyInjection 7.x.