就个人而言,我会创建一个特殊的类型来保存字符串:
class MyService(HttpClient client, MyServiceSettings settings)
{
// use MyServiceSettings.Whatever
}
class MyServiceSettings
{
public string Whatever { get; set; }
}
使用以下注册(添加Microsoft.Extensions.Http
以获得访问AddHttpClient
):
serviceCollection.AddSingleton(new MyServiceSettings { ... } ); // register correct value
serviceCollection.AddHttpClient<MyService>(httpClient => ...); // will register MyService as transient
或者,你可以看看工厂的方法:
serviceCollection.AddHttpClient("someName", httpClient => ...);
serviceCollection.AddTransient(sp =>
new MyService(
sp.GetRequiredService<IHttpClientFactory>().CreateClient("someName"),
"{getYourString}"));
实际上,这个字符串在应用程序的生命周期中是静态的,它来自args,并且包含每个对该实例的请求所使用的用户令牌
在某些情况下,您可以设置HttpClient
本身,例如,如果令牌作为header传递,则您可以执行如下操作:
serviceCollection.AddHttpClient<MyService>(httpClient =>
{
httpClient.DefaultRequestHeaders.Add("tokenHeaderName", "tokenValFromArgs");
});