Was sind auf IServiceProvider die Unterschiede zwischen den Methoden GetRequiredService und GetService?


Antworten:


96

Sie sollten diese Methoden selten aufrufen müssen, da Sie nach Möglichkeit die Konstruktorinjektion verwenden sollten.

In seltenen Fällen, z. B. in Fabriken oder zur dynamischen Instanziierung von Befehlshandlern, können Sie diese selbst beheben.

Davon abgesehen sollten Sie dort verwenden, GetRequiredServicewo Sie den Service benötigen . Es wird eine Ausnahme ausgelöst, wenn der Dienst nicht registriert ist.

GetServiceAuf der anderen Seite handelt es sich um optionale Abhängigkeiten, die nur zurückgegeben werden, nullwenn kein solcher Dienst registriert ist.


2
Sie sollten beachten, dass sich diese Semantik bei Verwendung eines externen DI-Anbieters geringfügig ändern kann. Beispielsweise verhalten sich in StructureMap beide Funktionen unterschiedlich: github.com/structuremap/…
rekiem87

46

Der Unterschied besteht darin , dass die GetService<T>()Renditen , nullwenn sie den Dienst nicht finden kann. GetRequiredService<T>()wirft InvalidOperationExceptionstattdessen ein.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.