【发布时间】:2021-10-16 15:06:32
【问题描述】:
我有一个使用 Polly 策略的 httpclient:
services.AddHttpClient("MyClient", (serviceProvider, client) =>
{
var X = External_PARAMETER;
client.BaseAddress = new Uri(settings.BaseUrl);
.....
})
.AddPolicyHandler(retryPolicy)
.AddPolicyHandler((provider, httpRequestMessage) => GetTokenPolicy(provider, httpRequestMessage));
当从这个命名的客户端创建 clienthttp 时,我想动态地传递一些参数给它,比如:
var httpClient = httpClientFactory.CreateClient("MyClient", External_PARAMETER);
我知道一种解决方案实际上是使用这样的单例服务并传递值: 据我所知,您不能在 AddHttpClient 定义中使用瞬态或范围服务。如果我使用非 sington 的,我会收到此错误(无法从根提供商解析范围服务“MyApp.IMyService”。))
services.AddHttpClient("MyClient", (serviceProvider, client) =>
{
var passedServer = serviceProvider.GetService<IMyService>();
var X = passedServer.GetMyParameter();
client.BaseAddress = new Uri(settings.BaseUrl);
.....
})
.AddPolicyHandler(retryPolicy)
.AddPolicyHandler((provider, httpRequestMessage) => GetTokenPolicy(provider, httpRequestMessage));
services.AddSingleton<IMyService, MyService>();
.
.
.
myServiceInstance.SetMyParameter("A_VALUE");
var httpClient = httpClientFactory.CreateClient("MyClient");
但是如果不使用像 MyService 这样的单例服务,我该如何实现呢?
在某些情况下,HTTP 请求应该创建一个 HttpClient 并且拥有一个 sington 服务意味着所有请求都可以访问这个不理想的单例服务。
【问题讨论】:
-
你为什么不在
CreateClient的结果上设置那个值?
标签: c# asp.net-core .net-core dotnet-httpclient polly