Partilhar via


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.

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.