Typy middlewaru s více konstruktory
Dříve byl z kontejneru injektáže závislostí vytvořena instance middlewarového typu s více satisfiable konstruktory, použil se typ middlewaru s největším využitím parametrů. Nyní k tomu dochází pouze v případě, že kontejner injektáž závislostí implementuje IServiceProviderIsService. Pokud ne, dojde k výjimce za běhu.
Zavedená verze
.NET 9 RC 1
Předchozí chování
Dříve byl první z následujících dvou konstruktorů upřednostňovaný (pokud byly oba splněny), protože má více parametrů.
public class CookiePolicyMiddleware
{
public CookiePolicyMiddleware(RequestDelegate next, IOptions<CookiePolicyOptions> options, ILoggerFactory factory)
{
// ...
}
public CookiePolicyMiddleware(RequestDelegate next, IOptions<CookiePolicyOptions> options)
{
// ...
}
}
Nové chování
Počínaje rozhraním .NET 9 se preferuje žádný konstruktor a konstrukce selže s chybou, například:
System.InvalidOperationException: "Více konstruktorů, které přijímají všechny dané typy argumentů byly nalezeny v typu Microsoft.AspNetCore.CookiePolicy.CookiePolicy.CookiePolicyMiddleware". Měl by existovat pouze jeden použitelný konstruktor."
Typ zásadní změny
Tato změna je změna chování.
Důvod změny
Aktivační mechanismus byl změněn tak, aby podporoval injektáž závislostí s klíči.
Doporučená akce
Pokud k tomu dojde a nemůžete upgradovat na kontejner injektáž závislostí, který implementuje IServiceProviderIsService, můžete přidat ActivatorUtilitiesConstructorAttribute do upřednostňovaného konstruktoru ovlivněného typu middlewaru.
Ovlivněná rozhraní API
Tato změna je známo, že způsobuje chyby při vytváření instancí Microsoft.AspNetCore.CookiePolicy.CookiePolicyMiddleware s autofac.Extensions.DependencyInjection 7.x.