gpt4 book ai didi

c# - ConfigureServices 中的 AddHttpContextAccessor 与每个 HttpClient

转载 作者:行者123 更新时间:2023-12-04 02:45:41 26 4
gpt4 key购买 nike

在 ConfigureServices 方法中一次添加 httpContextAccessor 与为每个 HttpClient 配置添加 HttpContextAccessor 之间有什么区别。

public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

// FIRST VERSION
services.AddHttpContextAccessor();

// SECOND VERSION
var myService1 = services.AddHttpClient<TestHttpClient1>(c =>
{
c.BaseAddress = new Uri(Configuration["TestHttpClient1"]);
});
myService1.Services.AddHttpContextAccessor();

var myService2 = services.AddHttpClient<TestHttpClient2>(c =>
{
c.BaseAddress = new Uri(Configuration["TestHttpClient2"]);
});
myService2.Services.AddHttpContextAccessor();
}

我的猜测是认为在第二个版本中,我们有两个单例,一个用于类 TestHttpClient1,另一个用于 TestHttpClient2 但我不明白为什么要这样做,因为我在生产中看到了这段代码。

最佳答案

Is there any difference between adding the httpContextAccessor one time in ConfigureServices method versus adding the HttpContextAccessor per HttpClient configured.



不,没有任何区别。 myService1.ServicesmyService2.Services两者都引用相同的 IServiceCollectionservices多变的。第一个调用( services.AddHttpContextAccessor() )将注册服务,但接下来的两个调用( myService1.Services.AddHttpContextAccessor()myService2.Services.AddHttpContextAccessor() )将无操作(什么都不做)。

为了将所有内容放在上下文中,这里是 AddHttpClient<TClient>(...) 的源代码的摘录。 ( source ):
var builder = new DefaultHttpClientBuilder(services, name);
// ...
return builder;
DefaultHttpClientBuilder 的新实例被创建,它包含了 IServiceCollection这是传入的。因为这是一个扩展方法, services这里指的是同一个 services就像你的 ConfigureServices方法。然后通过 IHttpClientBuilder.Services 暴露出来,这是您在引用时使用的,例如 myService1.Services .

调用 AddHttpContextAccessor用途 TryAddSingleton ,仅当服务尚未注册时才会注册该服务( source ):
services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();

在您的示例中,它已经通过第一次调用 services.AddHttpContextAccessor() 进行了注册。 ,这意味着接下来的两次注册尝试什么都不做。

关于c# - ConfigureServices 中的 AddHttpContextAccessor 与每个 HttpClient,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57366545/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com