Typy oprogramowania pośredniczącego z wieloma konstruktorami
Wcześniej, gdy typ oprogramowania pośredniczącego z wieloma satyfikowalnymi konstruktorami został utworzona z kontenera wstrzykiwania zależności, używany był ten z największymi parametrami. Teraz, gdy kontener wstrzykiwania zależności implementuje IServiceProviderIsServicewartość . Jeśli tak nie jest, w czasie wykonywania zostanie zgłoszony wyjątek.
Wprowadzona wersja
.NET 9 RC 1
Poprzednie zachowanie
Wcześniej pierwszy z następujących dwóch konstruktorów był preferowany (gdy oba były spełnione), ponieważ ma więcej parametrów.
public class CookiePolicyMiddleware
{
public CookiePolicyMiddleware(RequestDelegate next, IOptions<CookiePolicyOptions> options, ILoggerFactory factory)
{
// ...
}
public CookiePolicyMiddleware(RequestDelegate next, IOptions<CookiePolicyOptions> options)
{
// ...
}
}
Nowe zachowanie
Począwszy od platformy .NET 9, żaden konstruktor nie jest preferowany, a konstrukcja kończy się niepowodzeniem z powodu błędu, takiego jak:
System.InvalidOperationException: "Wiele konstruktorów akceptujących wszystkie podane typy argumentów zostało znalezionych w typie "Microsoft.AspNetCore.CookiePolicy.CookiePolicyMiddleware". Powinien istnieć tylko jeden odpowiedni konstruktor".
Typ zmiany powodującej niezgodność
Ta zmiana jest zmianą behawioralną.
Przyczyna wprowadzenia zmiany
Mechanizm aktywacji został zmieniony, aby pomóc w obsłudze wstrzykiwania zależności kluczy.
Zalecana akcja
Jeśli tak się stanie i nie można uaktualnić do kontenera iniekcji zależności, który implementuje IServiceProviderIsServiceelement , możesz dodać ActivatorUtilitiesConstructorAttribute element do preferowanego konstruktora typu oprogramowania pośredniczącego, którego dotyczy problem.
Dotyczy interfejsów API
Ta zmiana jest znana z błędów podczas tworzenia Microsoft.AspNetCore.CookiePolicy.CookiePolicyMiddleware wystąpienia za pomocą polecenia Autofac.Extensions.DependencyInjection 7.x.