Saltar al contenido

Inyección de dependencia: HttpClient o HttpClientFactory?

Traemos la mejor información que descubrimos por todo internet. Nuestro deseo es que te sirva de ayuda y si puedes compartir algo que nos pueda ayudar a mejorar hazlo con total libertad.

Solución:

Resumen

  • HttpClient solo se puede inyectar en el interior mecanografiado clientela
  • para otros usos, necesita IHttpClientFactory
  • En ambos escenarios, la vida útil de HttpClientMessageHandler es administrado por el marco, por lo que no está preocupado por desechar (incorrectamente) el HttpClients.

Ejemplos

Para inyectar directamente HttpClient, es necesario registrar un determinado mecanografiado servicio que recibirá el cliente:

services.AddHttpClient(c => c.BaseAddress = new System.Uri("https://api.github.com"));

Ahora podemos inyectar eso dentro del mecanografiado Cliente Github

public class GithubClient

    public GithubClient(HttpClient client)
    
        // client.BaseAddress is "https://api.github.com"
    

No puedes inyectar el HttpClient dentro AnotherClient, porque no esta escrito a AnotherClient

public class AnotherClient

    public AnotherClient(HttpClient client)
    
        // InvalidOperationException, can't resolve HttpClient 
    

Sin embargo, puedes:
1. Inyecte el IHttpClientFactory y llama CreateClient(). Este cliente tendrá BaseAddress ajustado a null.
2. O configurar AnotherClient como un cliente de diferente tipo con, por ejemplo, un diferente BaseAdress.

Actualizar

Basado en su comentario, usted está registrando un Nombrada cliente. Todavía se resuelve desde el método IHttpClientFactory.CreateClient(), pero debe pasar el ‘nombre’ del cliente

Registro

services.AddHttpClient("githubClient", c => c.BaseAddress = new System.Uri("https://api.github.com"));

Uso

// note that we inject IHttpClientFactory
public HomeController(IHttpClientFactory factory)

    this.defaultClient = factory.CreateClient(); // BaseAddress: null
    this.namedClient = factory.CreateClient("githubClient"); // BaseAddress: "https://api.github.com"

Lamentablemente no puedo comentar, solo publicar una respuesta. Por lo tanto, le sugiero que consulte los siguientes enlaces:

https://docs.microsoft.com/en-us/dotnet/architecture/microservices/implement-resilient-applications/use-httpclientfactory-to-implement-resilient-http-requests

https://aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/

Con respecto a sus preguntas, más o menos se reduce a esto:

Q1 -> IHttpClientFactory maneja los grupos de conexiones de las instancias de HttpClient y esto lo ayudará con respecto a los problemas de carga y eliminación como se describe en los enlaces, si HttpClient se usa incorrectamente.

Q2 -> sí, debe usar factory.create client de acuerdo con los documentos de microsoft

Aquí puedes ver las comentarios y valoraciones de los lectores

Puedes añadir valor a nuestro contenido colaborando tu veteranía en las críticas.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *