web-dev-qa-db-fra.com

Sur IServiceProvider, quelles sont les différences entre les méthodes GetRequiredService et GetService?

Quelles sont les différences entre IServiceProvider.GetRequiredService() et IServiceProvider.GetService()?

Quand est-il préférable d'utiliser GetRequiredService()?

54
Art Base

Vous devriez rarement avoir à faire appel à ces méthodes, car vous devriez utiliser une injection par constructeur chaque fois que possible.

Dans de rares cas, tels que des usines ou pour instancier de manière dynamique des gestionnaires de commandes, vous pouvez le résoudre vous-même.

Cela étant dit, vous devriez utiliser GetRequiredService où vous devez le service. Il lève une exception lorsque le service n'est pas enregistré.

GetService de l'autre côté est pour facultatif dépendances, qui retournera simplement null quand aucun service de ce type n'est enregistré.

74
Tseng

La différence est que GetService<T>() renvoie null s'il ne peut pas trouver le service. GetRequiredService<T>() lance un InvalidOperationException à la place.

36
tchelidze