我希望在运行时能够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;
}
}