Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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.
Empfohlene Maßnahme
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.