就我个人而言,我只想创建一个特殊的类型来容纳字符串:
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,并包含每个对该实例的请求所使用的users令牌
在某些情况下,您只需设置
HttpClient
本身,例如,如果令牌作为标头传递,则可以执行以下操作:
serviceCollection.AddHttpClient<MyService>(httpClient =>
{
httpClient.DefaultRequestHeaders.Add("tokenHeaderName", "tokenValFromArgs");
});