Tipos de middleware com vários construtores
Anteriormente, quando um tipo de middleware com vários construtores satisfatíveis era instanciado a partir do contêiner de injeção de dependência, aquele com mais parâmetros era usado. Agora, isso só acontece se o contêiner de injeção de IServiceProviderIsServicedependência implementar . Caso contrário, 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 a seguir era preferido (quando ambos eram 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 dos construtores é preferencial e a construção falha com um erro como:
System.InvalidOperationException: 'Vários construtores que aceitam todos os tipos de argumento fornecidos foram encontrados no tipo 'Microsoft.AspNetCore.CookiePolicy.CookiePolicyMiddleware'. Deve haver apenas um construtor aplicável.
Tipo de alteração interruptiva
Esta é uma alteração comportamental.
Motivo da alteração
O mecanismo de ativação foi alterado para ajudar a dar suporte à 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 IServiceProviderIsServicedependência que implemente , 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.