具有多個建構函式的中間件類型
先前,從相依性插入容器具現化具有多個可滿足建構函式的中間件類型時,會使用具有最多參數的中間件類型。 現在只有在相依性插入容器實作 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化時造成錯誤。