Condividi tramite


Tipi di middleware con più costruttori

In precedenza, quando è stata creata un'istanza di un tipo middleware con più costruttori satisfiable dal contenitore di inserimento delle dipendenze, è stato usato quello con il maggior numero di parametri. Ora che si verifica solo se il contenitore di inserimento delle dipendenze implementa IServiceProviderIsService. In caso contrario, viene generata un'eccezione in fase di esecuzione.

Versione introdotta

.NET 9 RC 1

Comportamento precedente

In precedenza, il primo dei due costruttori seguenti era preferibile (quando entrambi sono stati soddisfatti) perché ha più parametri.

public class CookiePolicyMiddleware
{
    public CookiePolicyMiddleware(RequestDelegate next, IOptions<CookiePolicyOptions> options, ILoggerFactory factory)
    {
        // ...
    }

    public CookiePolicyMiddleware(RequestDelegate next, IOptions<CookiePolicyOptions> options)
    {
        // ...
    }
}

Nuovo comportamento

A partire da .NET 9, nessuno dei due costruttori è preferibile e la costruzione non riesce con un errore simile al seguente:

System.InvalidOperationException: 'Sono stati trovati più costruttori che accettano tutti i tipi di argomento specificati nel tipo 'Microsoft.AspNetCore.CookiePolicy.CookiePolicyMiddleware'. Dovrebbe essere presente un solo costruttore applicabile".

Tipo di modifica che causa un'interruzione

Questa è una modifica funzionale.

Motivo della modifica

Il meccanismo di attivazione è stato modificato per supportare l'inserimento delle dipendenze con chiave.

In questo caso e non è possibile eseguire l'aggiornamento a un contenitore di inserimento delle dipendenze che implementa IServiceProviderIsService, è possibile aggiungere l'oggetto ActivatorUtilitiesConstructorAttribute al costruttore preferito del tipo middleware interessato.

API interessate

Questa modifica è nota per causare errori durante la creazione di Microsoft.AspNetCore.CookiePolicy.CookiePolicyMiddleware un'istanza con Autofac.Extensions.DependencyMakection 7.x.