FromKeyedServicesAttribute no longer injects non-keyed parameter
სტატია
When you use FromKeyedServicesAttribute to specify a keyed service to be injected, an incorrect service might be passed.
Previous behavior
Previously, when a keyed service was intended to be injected as a parameter in a service constructor by using FromKeyedServicesAttribute and the corresponding keyed service (service1 in the following example) wasn't registered as a keyed service but was registered as a non-keyed service type (IService in the following example), the non-keyed service was injected instead of throwing an exception.
public MyService([FromKeyedServices("service1")] IService service1, ...
New behavior
Starting in .NET 9, an InvalidOperationException is thrown when FromKeyedServicesAttribute is used and the specified keyed service isn't found. This behavior is consistent with other cases when the requested service can't be found due to lack of registration.
This change adds missing validation logic to detect service misconfiguration bugs. This issue existed when the keyed service feature was added in v8.0.
Recommended action
If FromKeyedServicesAttribute is used, ensure that the corresponding service is registered as a keyed service, such as by using IServiceCollection.AddKeyedScoped(), IServiceCollection.AddKeyedSingleton(), or IServiceCollection.AddKeyedTransient().
The fix has also been backported to .NET 8.0.9, so both .NET 8 and .NET 9 have the same behavior. If your application depends on the old behavior, a feature switch was added for .NET 8.0.9 (but not .NET 9) named Microsoft.Extensions.DependencyInjection.AllowNonKeyedServiceInject. Set the switch to true to keep the old behavior.
ამ შიგთავსის წყაროს მოძიება GitHub-ზე არის შესაძლებელი, სადაც თქვენ ასევე შეგიძლიათ პრობლემების შექმნა და განხილვა და მოთხოვნების გადმოტანა. დამატებითი ინფორმაციისთვის იხილეთ ჩვენი დამხმარე სახელმძღვანელო.
.NET-(ი)ს უკუკავშირი
.NET არის ღია წყაროს პროექტი. აირჩიეთ ბმული უკუკავშირის გასაგზავნად:
შემოუერთდით Meetup სერიას, რათა შექმნათ მასშტაბური AI გადაწყვეტილებები რეალურ სამყაროში გამოყენების შემთხვევებზე დაყრდნობით თანამემამულე დეველოპერებთან და ექსპერტებთან.