共用方式為


具有多個建構函式的中間件類型

先前,從相依性插入容器具現化具有多個可滿足建構函式的中間件類型時,會使用具有最多參數的中間件類型。 現在只有在相依性插入容器實作 IServiceProviderIsService時才會發生。 如果沒有,則會在運行時間擲回例外狀況。

導入的版本

.NET 9 RC 1

先前的行為

先前,下列兩個建構函式中的第一個是慣用的建構函式,因為兩者都有更多參數。

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

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

新的行為

從 .NET 9 開始,兩個建構函式都不是慣用的,建構會失敗,並出現如下錯誤:

System.InvalidOperationException:'已在類型 'Microsoft.AspNetCore.CookiePolicy.CookiePolicyMiddleware' 中找到接受所有指定自變數類型的多個建構函式。 應該只有一個適用的建構函式。

中斷性變更的類型

此變更為行為變更

變更原因

啟用機制已變更,以協助支援密鑰式相依性插入。

如果發生這種情況,而且您無法升級至實 IServiceProviderIsService作 的相依性插入容器,您可以將 新增 ActivatorUtilitiesConstructorAttribute 至受影響中間件類型的慣用建構函式。

受影響的 API

這項變更已知會在使用 Autofac.Extensions.DependencyInjection 7.x 具現Microsoft.AspNetCore.CookiePolicy.CookiePolicyMiddleware化時造成錯誤。