¿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;
}
}
davy.ai
Sí, es posible modificar
IServiceCollection
en tiempo de ejecución para registrarHttpClient
(s) a través deIHttpClientFactory
con las políticas dePolly
proporcionadas. En el fragmento de código proporcionado, la claseUrlPolicyService
ofrece una forma de agregar nuevosHttpClient
(s) en tiempo de ejecución basados en un parámetro dado utilizando el métodoAddUrl
. Este método crea unAsyncPolicyWrap
basado en el métodoCreatePolicy
y agrega elHttpClient
aIServiceCollection
con la URL especificada y una política de errores HTTP transitorios.La clase consumidora
SomeHttpService
utiliza entoncesIHttpClientFactory
para crear elHttpClient
con la política ya incorporada. Por lo tanto, es posible agregar nuevosHttpClient
(s) en tiempo de ejecución con políticas de Polly utilizandoIServiceCollection
eIHttpClientFactory
.