Dela via


Mellanprogramstyper med flera konstruktorer

Tidigare, när en mellanprogramstyp med flera nöjda konstruktorer instansierades från containern för beroendeinmatning, användes den med flest parametrar. Nu händer det bara om containern för beroendeinmatning implementerar IServiceProviderIsService. Om det inte gör det utlöses ett undantag vid körning.

Version introducerad

.NET 9 RC 1

Tidigare beteende

Tidigare föredrogs den första av följande två konstruktorer (när båda var uppfyllda) eftersom den har fler parametrar.

public class CookiePolicyMiddleware
{
    public CookiePolicyMiddleware(RequestDelegate next, IOptions<CookiePolicyOptions> options, ILoggerFactory factory)
    {
        // ...
    }

    public CookiePolicyMiddleware(RequestDelegate next, IOptions<CookiePolicyOptions> options)
    {
        // ...
    }
}

Nytt beteende

Från och med .NET 9 föredras ingen konstruktor och konstruktionen misslyckas med ett fel som:

System.InvalidOperationException: "Flera konstruktorer som accepterar alla angivna argumenttyper har hittats i typen "Microsoft.AspNetCore.CookiePolicy.CookiePolicyMiddleware". Det bör endast finnas en tillämplig konstruktor."

Typ av icke-bakåtkompatibel ändring

Den här ändringen är en beteendeförändring.

Orsak till ändringen

Aktiveringsmekanismen har ändrats för att stödja nyckelinmatning av beroenden.

Om detta händer och du inte kan uppgradera till en beroendeinmatningscontainer som implementerar IServiceProviderIsServicekan du lägga till ActivatorUtilitiesConstructorAttribute i önskad konstruktor för den berörda mellanprogramstypen.

Berörda API:er

Den här ändringen är känd för att orsaka fel när du instansierar Microsoft.AspNetCore.CookiePolicy.CookiePolicyMiddleware med Autofac.Extensions.DependencyInjection 7.x.