Udostępnij przez


FromKeyedServicesAttribute nie wprowadza już parametru bez klucza

Jeśli używasz FromKeyedServicesAttribute polecenia , aby określić usługę kluczy do wstrzyknięcia, może zostać przekazana nieprawidłowa usługa.

Poprzednie zachowanie

Wcześniej, gdy usługa kluczy miała zostać wstrzyknięta jako parametr w konstruktorze usługi przy użyciu polecenia FromKeyedServicesAttribute i odpowiadająca mu usługa kluczowa (service1w poniższym przykładzie) nie została zarejestrowana jako usługa kluczy, ale wstrzyknięta zamiast zgłaszać wyjątek.

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

Nowe zachowanie

Począwszy od platformy .NET 9, element jest zgłaszany, InvalidOperationException gdy FromKeyedServicesAttribute jest używany, a określona usługa kluczy nie zostanie znaleziona. To zachowanie jest zgodne z innymi przypadkami, gdy żądana usługa nie może być znaleziona z powodu braku rejestracji.

Wprowadzona wersja

Obsługa programów .NET 9 RC 1 i 8.0.9

Typ zmiany powodującej niezgodność

Ta zmiana jest zmianą behawioralną.

Przyczyna wprowadzenia zmiany

Ta zmiana dodaje brakującą logikę walidacji w celu wykrywania błędów nieprawidłowej konfiguracji usługi. Ten problem istniał, gdy funkcja usługi kluczy została dodana w wersji 8.0.

Jeśli FromKeyedServicesAttribute jest używany, upewnij się, że odpowiednia usługa jest zarejestrowana jako usługa z kluczem, na przykład przy użyciu IServiceCollection.AddKeyedScoped()metody , IServiceCollection.AddKeyedSingleton()lub IServiceCollection.AddKeyedTransient().

Poprawka została również przywrócona do platformy .NET 8.0.9, więc zarówno .NET 8, jak i .NET 9 mają takie samo zachowanie. Jeśli aplikacja zależy od starego zachowania, dodano przełącznik funkcji dla platformy .NET 8.0.9 (ale nie .NET 9) o nazwie Microsoft.Extensions.DependencyInjection.AllowNonKeyedServiceInject. Ustaw przełącznik , aby true zachować stare zachowanie.

Dotyczy interfejsów API