Olvasás angol nyelven

Megosztás a következőn keresztül:


A FromKeyedServicesAttribute már nem injektálja a nem kulcsos paramétert

Ha egy injektálandó kulcsos szolgáltatást ad FromKeyedServicesAttribute meg, előfordulhat, hogy helytelen szolgáltatást ad át a rendszer.

Előző viselkedés

Korábban, amikor egy kulcsos szolgáltatást paraméterként kívántak injektálni egy szolgáltatáskonstruktorban, FromKeyedServicesAttribute és a megfelelő kulcsos szolgáltatás (service1 a következő példában) nem kulcsos szolgáltatásként lett regisztrálva, hanem nem kulcsos szolgáltatástípusként lett regisztrálva (IService a következő példában), a nem kulcsos szolgáltatást a rendszer a kivétel kivetése helyett injektálta.

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

Új viselkedés

A .NET 9-től kezdődően a rendszer eldobja InvalidOperationException a rendszer, amikor FromKeyedServicesAttribute használatban van, és a megadott kulcsos szolgáltatás nem található. Ez a viselkedés összhangban van más esetekkel, amikor a kért szolgáltatás nem található a regisztráció hiánya miatt.

Bevezetett verzió

.NET 9 RC 1 és 8.0.9 karbantartás

A kompatibilitástörő változás típusa

Ez a változás viselkedésbeli változás.

A változás oka

Ez a módosítás hiányzó érvényesítési logikát ad hozzá a szolgáltatás helytelen konfigurációs hibáinak észleléséhez. Ez a probléma a kulcsos szolgáltatás 8.0-s verzióban való hozzáadásakor lépett fel.

Ha FromKeyedServicesAttribute használatban van, győződjön meg arról, hogy a megfelelő szolgáltatás kulcsolt szolgáltatásként van regisztrálva, például az , IServiceCollection.AddKeyedSingleton()vagy IServiceCollection.AddKeyedTransient()a .IServiceCollection.AddKeyedScoped()

A javítás a .NET 8.0.9-be is vissza lett küldve, így a .NET 8 és a .NET 9 is ugyanazzal a működésű. Ha az alkalmazás a régi viselkedéstől függ, a .NET 8.0.9-hez (de a .NET 9-hez nem) hozzáadtunk egy funkciókapcsolót Microsoft.Extensions.DependencyInjection.AllowNonKeyedServiceInject. Állítsa be a kapcsolót úgy, hogy true megtartsa a régi viselkedést.

Érintett API-k