FromKeyedServicesAttribute больше не вводит неключимый параметр

При использовании FromKeyedServicesAttribute для указания внедренной службы с ключом может быть передана неправильная служба.

Прежнее поведение

Ранее, когда служба с ключами была предназначена для внедрения в качестве параметра в конструкторе служб с помощью и FromKeyedServicesAttribute соответствующей ключевой службы (в следующем примере) не была зарегистрирована в качестве ключевой службы, но service1 зарегистрирована как тип службы, не относящийся к ключу (IServiceв следующем примере), служба, не являющаяся ключом, была введена вместо того, чтобы вызвать исключение.

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

Новое поведение

Начиная с .NET 9, InvalidOperationException возникает при FromKeyedServicesAttribute использовании, и указанная служба ключей не найдена. Это поведение соответствует другим случаям, когда запрошенная служба не найдена из-за отсутствия регистрации.

Представленные версии

Обслуживание .NET 9 RC 1 и 8.0.9

Тип критического изменения

Это изменение поведения.

Причина изменения

Это изменение добавляет недостающую логику проверки для обнаружения ошибок конфигурации службы. Эта проблема возникла при добавлении функции службы с ключом в версии 8.0.

Если FromKeyedServicesAttribute используется, убедитесь, что соответствующая служба зарегистрирована в качестве ключевой службы, например с помощью IServiceCollection.AddKeyedScoped(), IServiceCollection.AddKeyedSingleton()или IServiceCollection.AddKeyedTransient().

Исправление также было сохранено в .NET 8.0.9, поэтому как .NET 8, так и .NET 9 имеют одинаковое поведение. Если приложение зависит от старого поведения, параметр функции был добавлен для .NET 8.0.9 (но не .NET 9).Microsoft.Extensions.DependencyInjection.AllowNonKeyedServiceInject Установите переключатель, чтобы true сохранить старое поведение.

Затронутые API