web-dev-qa-db-de.com

Welche Unterschiede bestehen bei IServiceProvider zwischen den Methoden GetRequiredService und GetService?

Was sind die Unterschiede zwischen IServiceProvider.GetRequiredService() und IServiceProvider.GetService()?

Wann ist es eine bessere Idee, GetRequiredService() zu verwenden?

54
Art Base

Sie sollten diese Methoden selten aufrufen müssen, da Sie, wo immer möglich, Konstruktorinjektion verwenden sollten.

In seltenen Fällen, z. B. in Fabriken oder zum dynamischen Instanziieren von Befehlshandlern, können Sie dies selbst beheben.

Davon abgesehen sollten Sie GetRequiredService verwenden, wo Sie erfordern den Dienst. Es wird eine Ausnahme ausgelöst, wenn der Dienst nicht registriert ist.

GetService auf der anderen Seite steht für optional Abhängigkeiten, die nur null zurückgeben, wenn kein solcher Dienst registriert ist.

74
Tseng

Der Unterschied besteht darin, dass GetService<T>()null zurückgibt, wenn der Dienst nicht gefunden werden kann. GetRequiredService<T>() wirft stattdessen ein InvalidOperationException.

36
tchelidze