es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo registrar HttpClient con la política de Polly en tiempo de ejecución?

Quiero poder registrar en tiempo de ejecución HttpClient(s) a través de IHttpClientFactory con las políticas de Polly que se le proporcionen. ¿Es posible modificar de alguna manera IServiceCollection?

Sé que IServiceCollection es un contenedor que solo se utiliza para inicialización y que luego los servicios deben resolverse con IServiceProvider, pero necesito agregar nuevos HttpClient(s) en tiempo de ejecución según los parámetros proporcionados:

Registrar servicio

public class UrlPolicyService : IUrlPolicyService
    {
        private IServiceCollection serviceCollection;

        public void AddUrl(string url)
        {

            AsyncPolicyWrap<HttpResponseMessage> policy = CreatePolicy();
            serviceCollection
                .AddHttpClient(url)
                .AddTransientHttpErrorPolicy(handler => policy);

        }
        public AsyncPolicyWrap<HttpResponseMessage> CreatePolicy()
        {
           return null;/alguna lógica de política
        }
        public UrlPolicyService(IServiceCollection services)
        {
             this.serviceCollection = services;
        }

 }

Consumidor

public void SomeHttpService
{
     private IHttpClientFactory factory;

     public async Task DoRequestWithPolicy(string url)
     {
           var policiedClient=this.factory.CreateClient(url);
           //// realizar solicitud http con la política ya incrustada;
     }
     public SomeHttpService(IHttpClientFactory factory)
     {
         this.factory=factory;
     }
}
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible modificar IServiceCollection en tiempo de ejecución para registrar HttpClient(s) a través de IHttpClientFactory con las políticas de Polly proporcionadas. En el fragmento de código proporcionado, la clase UrlPolicyService ofrece una forma de agregar nuevos HttpClient(s) en tiempo de ejecución basados en un parámetro dado utilizando el método AddUrl. Este método crea un AsyncPolicyWrap basado en el método CreatePolicy y agrega el HttpClient a IServiceCollection con la URL especificada y una política de errores HTTP transitorios.

    La clase consumidora SomeHttpService utiliza entonces IHttpClientFactory para crear el HttpClient con la política ya incorporada. Por lo tanto, es posible agregar nuevos HttpClient(s) en tiempo de ejecución con políticas de Polly utilizando IServiceCollection e IHttpClientFactory.

Comments are closed.