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.
Empfohlene Maßnahme
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.