共用方式為


FromKeyedServicesAttribute 不再插入非索引鍵參數

當您使用 FromKeyedServicesAttribute 來指定要插入的索引鍵服務時,可能會傳遞不正確的服務。

先前的行為

先前,當索引鍵服務是用來使用 FromKeyedServicesAttribute 在服務建構函式中做為參數插入,且對應的索引鍵服務 (service1 在下列範例中) 未註冊為索引鍵服務,但註冊為非索引服務類型 (IService 在下列範例中),則會插入非索引鍵服務,而不是擲回例外狀況。

public MyService([FromKeyedServices("service1")] IService service1, ...

新的行為

從 .NET 9 開始,當使用了 FromKeyedServicesAttribute 而且找不到指定的索引鍵服務,就會擲回 InvalidOperationException。 當因為缺少註冊而找不到要求的服務時,此行為與其他案例一致。

導入的版本

.NET 9 RC 1 和 8.0.9 服務

中斷性變更的類型

此變更為行為變更

變更原因

這項變更會新增遺漏的驗證邏輯,以偵測服務設定錯誤的錯誤。 在 v8.0 新增該索引鍵服務功能時,會存在此問題。

如果使用 FromKeyedServicesAttribute,請確定對應的服務已註冊為索引鍵服務,例如使用 IServiceCollection.AddKeyedScoped()IServiceCollection.AddKeyedSingleton()IServiceCollection.AddKeyedTransient()

修正也已向後移植到 .NET 8.0.9,因此 .NET 8 和 .NET 9 具有相同的行為。 如果您的應用程式相依於舊的行為,則已針對名為 Microsoft.Extensions.DependencyInjection.AllowNonKeyedServiceInject 的 .NET 8.0.9 (但不是 .NET 9) 新增功能開關。 將開關設定為 true 以保留舊的行為。

受影響的 API