Freigeben über


FromKeyedServicesAttribute fügt keinen Nichtschlüsselparameter mehr ein.

Wenn Sie FromKeyedServicesAttribute zum Angeben eines zu injizierenden Schlüssels verwenden, wird möglicherweise ein falscher Dienst übergeben.

Vorheriges Verhalten

Zuvor wurde ein Schlüsseldienst, der als Parameter in einen Dienstkonstruktor mithilfe von FromKeyedServicesAttribute eingefügt werden soll, und der entsprechende Schlüsseldienst (service1 im folgenden Beispiel) nicht als Schlüsseldienst, sondern als nicht schlüsselbasierter Dienst (im folgenden Beispiel) registriert wurde ,IService anstatt eine Ausnahme auszuwerfen.

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

Neues Verhalten

Ab .NET 9 wird ein InvalidOperationException ausgelöst, wenn FromKeyedServicesAttribute verwendet wird und der angegebene Schlüsseldienst nicht gefunden wird. Dieses Verhalten entspricht anderen Fällen, in denen der angeforderte Dienst aufgrund fehlender Registrierung nicht gefunden werden kann.

Eingeführt in Version

.NET 9 RC 1- und 8.0.9-Wartung

Typ des Breaking Changes

Diese Änderung ist eine Verhaltensänderung.

Grund für die Änderung

Diese Änderung fügt fehlende Überprüfungslogik hinzu, um Fehlkonfigurationsfehler des Diensts zu erkennen. Dieses Problem ist aufgetreten, wenn das Schlüsseldienst-Feature in v8.0 hinzugefügt wurde.

Falls FromKeyedServicesAttribute verwendet wird, stellen Sie sicher, dass der entsprechende Dienst als Schlüsseldienst registriert ist, z. B. mithilfe von IServiceCollection.AddKeyedScoped(), IServiceCollection.AddKeyedSingleton() oder IServiceCollection.AddKeyedTransient().

Der Fix wurde auch in .NET 8.0.9 zurückportiert, sodass sowohl .NET 8 als auch .NET 9 das gleiche Verhalten aufweisen. Wenn Ihre Anwendung vom alten Verhalten abhängt, wurde für .NET 8.0.9 (aber nicht .NET 9) ein Featurewechsel namens Microsoft.Extensions.DependencyInjection.AllowNonKeyedServiceInject hinzugefügt. Legen Sie den Schalter auf true fest, um das alte Verhalten beizubehalten.

Betroffene APIs