services net mvc iservicecollection injection framework dependency configureservices asp addscoped dependency-injection asp.net-core .net-core

dependency injection - net - En IServiceProvider, ¿cuáles son las diferencias entre los métodos GetRequiredService y GetService?



mvc dependency injection (2)

¿Cuáles son las diferencias entre IServiceProvider.GetRequiredService() e IServiceProvider.GetService() ?

¿Cuándo es una mejor idea usar GetRequiredService() ?


La diferencia es que GetService<T>() devuelve null si no puede encontrar el servicio. GetRequiredService<T>() arroja una InvalidOperationException en InvalidOperationException lugar.


Rara vez debería llamar a estos métodos, ya que debería usar la inyección del constructor siempre que sea posible.

En casos excepcionales, como fábricas o para crear instancias dinámicas de controladores de comandos, puede resolverlo usted mismo.

Dicho esto, debe usar GetRequiredService donde requiera el servicio. Lanzará una excepción, cuando el servicio no esté registrado.

GetService en el otro lado es para dependencias opcionales , que simplemente devolverán null cuando no haya dicho servicio registrado.