Middlewaretypen met meerdere constructors
Voorheen werd, toen een middlewaretype met meerdere satisfiable constructors werd geïnstantieerd vanuit de container voor afhankelijkheidsinjectie, de container met de meeste parameters werd gebruikt. Dit gebeurt alleen als de afhankelijkheidsinjectiecontainer IServiceProviderIsServicewordt geïmplementeerd. Als dit niet het probleem is, wordt er tijdens runtime een uitzondering gegenereerd.
Versie geïntroduceerd
.NET 9 RC 1
Vorig gedrag
Voorheen had de eerste van de volgende twee constructors de voorkeur (toen beide waren voldaan) omdat deze meer parameters heeft.
public class CookiePolicyMiddleware
{
public CookiePolicyMiddleware(RequestDelegate next, IOptions<CookiePolicyOptions> options, ILoggerFactory factory)
{
// ...
}
public CookiePolicyMiddleware(RequestDelegate next, IOptions<CookiePolicyOptions> options)
{
// ...
}
}
Nieuw gedrag
Vanaf .NET 9 heeft geen van beide constructor de voorkeur en mislukt de constructie met een fout zoals:
System.InvalidOperationException: 'Meerdere constructors die alle opgegeven argumenttypen accepteren, zijn gevonden in het type Microsoft.AspNetCore.CookiePolicy.CookiePolicyMiddleware'. Er mag slechts één toepasselijke constructor zijn.'
Type wijziging die fouten veroorzaken
Deze wijziging is een gedragswijziging.
Reden voor wijziging
Het activeringsmechanisme is gewijzigd om ondersteuning te bieden voor sleutel-afhankelijkheidsinjectie.
Aanbevolen actie
Als dit gebeurt en u geen upgrade kunt uitvoeren naar een container voor afhankelijkheidsinjectie IServiceProviderIsServicedie wordt geïmplementeerd, kunt u de ActivatorUtilitiesConstructorAttribute gewenste constructor van het betreffende middlewaretype toevoegen.
Betrokken API's
Deze wijziging is bekend dat er fouten optreden bij het instantiëren Microsoft.AspNetCore.CookiePolicy.CookiePolicyMiddleware met Autofac.Extensions.DependencyInjection 7.x.