Sdílet prostřednictvím


FromKeyedServicesAttribute už neinjektuje neklíčový parametr.

Pokud použijete FromKeyedServicesAttribute k určení služby s klíči, která se má vloženého do injektáže, může být předána nesprávná služba.

Předchozí chování

Dříve, když byla služba s klíči určena k vložení jako parametr do konstruktoru služby pomocí FromKeyedServicesAttribute a odpovídající klíčovaná služba (service1 v následujícím příkladu) nebyla zaregistrována jako klíčovaná služba, ale byla zaregistrována jako typ služby bez klíče (IService v následujícím příkladu), služba bez klíče byla vložena místo vyvolání výjimky.

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

Nové chování

Počínaje rozhraním .NET 9 InvalidOperationException se vyvolá při FromKeyedServicesAttribute použití a zadaná služba s klíči se nenašla. Toto chování je konzistentní s jinými případy, kdy požadovaná služba není nalezena kvůli nedostatku registrace.

Zavedená verze

Údržba .NET 9 RC 1 a 8.0.9

Typ zásadní změny

Tato změna je změna chování.

Důvod změny

Tato změna přidá chybějící logiku ověřování pro detekci chyb chyb konfigurace služby. Tento problém existoval, když byla funkce klíčové služby přidána ve verzi 8.0.

Pokud FromKeyedServicesAttribute se používá, ujistěte se, že je odpovídající služba zaregistrovaná jako klíčová služba, například pomocí , IServiceCollection.AddKeyedSingleton()IServiceCollection.AddKeyedScoped()nebo IServiceCollection.AddKeyedTransient().

Oprava se také vrátila zpět do rozhraní .NET 8.0.9, takže obě platformy .NET 8 a .NET 9 mají stejné chování. Pokud vaše aplikace závisí na starém chování, byl přidán přepínač funkcí pro .NET 8.0.9 (ale ne .NET 9) s názvem Microsoft.Extensions.DependencyInjection.AllowNonKeyedServiceInject. Nastavte přepínač tak, aby true zachoval staré chování.

Ovlivněná rozhraní API