Compartilhar via


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.

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.