Freigeben über


Middleware-Typen mit mehreren Konstruktoren

Wenn zuvor ein Middleware-Typ mit mehreren zufriedenstellenden Konstruktoren aus dem Container zum Einfügen von Abhängigkeiten instanziiert wurde, wurde der Typ mit den meisten Parametern verwendet. Dies geschieht nur, wenn der Container zum Einfügen von Abhängigkeiten IServiceProviderIsServiceimplementiert wird. Wenn dies nicht der Fehler ist, wird zur Laufzeit eine Ausnahme ausgelöst.

Eingeführt in Version

.NET 9 RC 1

Vorheriges Verhalten

Zuvor wurde die erste der beiden folgenden Konstruktoren bevorzugt (wenn beide erfüllt wurden), da sie mehr Parameter enthält.

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

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

Neues Verhalten

Ab .NET 9 wird kein Konstruktor bevorzugt, und die Konstruktion schlägt mit einem Fehler wie folgt fehl:

System.InvalidOperationException: 'Mehrere Konstruktoren, die alle angegebenen Argumenttypen akzeptieren, wurden im Typ 'Microsoft.AspNetCore.CookiePolicy.CookiePolicyMiddleware' gefunden. Es sollte nur ein anwendbarer Konstruktor vorhanden sein."

Typ des Breaking Changes

Diese Änderung ist eine Verhaltensänderung.

Grund für die Änderung

Der Aktivierungsmechanismus wurde geändert, um die Unterstützung der Keyed-Abhängigkeitsinjektion zu unterstützen.

Wenn dies geschieht und Sie kein Upgrade auf einen Implementierten Container für Abhängigkeiten durchführen können, können Sie den ActivatorUtilitiesConstructorAttribute bevorzugten Konstruktor des betroffenen Middleware-Typs IServiceProviderIsServicehinzufügen.

Betroffene APIs

Diese Änderung ist bekannt, um Fehler beim Instanziieren Microsoft.AspNetCore.CookiePolicy.CookiePolicyMiddleware mit Autofac.Extensions.DependencyInjection 7.x zu verursachen.