FromKeyedServicesAttribute를 사용하여 삽입할 키 서비스를 지정하는 경우 잘못된 서비스가 전달될 수 있습니다.
이전 동작
이전에는 FromKeyedServicesAttribute를 사용하여 키 서비스를 서비스 생성자의 매개 변수로 삽입하려고 했으며, 해당 키 서비스(다음 예제에서 service1)가 키 서비스로 등록되지 않았지만 키가 지정되지 않은 서비스 유형(다음 예제에서 )으로 IService 때 키가 지정되지 않은 서비스가 예외를 throw하는 대신 삽입되었습니다.
public MyService([FromKeyedServices("service1")] IService service1, ...
새 동작
.NET 9부터는 InvalidOperationException를 사용하고 지정된 키 서비스를 찾을 수 없는 경우 FromKeyedServicesAttribute이 throw됩니다. 이 동작은 등록 부족으로 인해 요청된 서비스를 찾을 수 없는 다른 경우와 일치합니다.
도입된 버전
.NET 9 RC 1 및 8.0.9 서비스
호환성이 손상되는 변경의 형식
이 변경 사항은 동작 변경입니다.
변경 이유
이 변경은 누락된 유효성 검증 로직을 추가하여 서비스 잘못된 구성 버그를 감지합니다. v8.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
.NET