Udostępnij za pośrednictwem


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.

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.