0

我希望在运行时能够HttpClient通过IHttpClientFactory给定的Polly策略在运行时注册。是否有可能以某种方式改变IServiceCollection?

我知道IServiceCollection是一个仅用于初始化的容器,之后服务应该用 解决IServiceProvider,但我需要HttpClient在运行时根据给定的参数添加新的(s):

注册服务

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;/some policy logic
        }
        public UrlPolicyService(IServiceCollection services)
        {
             this.serviceCollection = services;
        }
        
 }

消费者

public void SomeHttpService
{
     private IHttpClientFactory factory;

     public async Task DoRequestWithPolicy(string url)
     {
           var policiedClient=this.factory.CreateClient(url);
           //// make http request with policy embedded already;
     }
     public SomeHttpService(IHttpClientFactory factory)
     {
         this.factory=factory;
     }
}
4

0 回答 0