HttpClient 工厂已经有一个类型为 c# 的注册客户端

问题描述 投票:0回答:2

我需要将 HttpClient 注入到具有相同接口的多个类中

 service.AddTransient<IFooService, AFooService>();
            service.AddHttpClient<IFooService, AFooService>((serviceProvider, httpClient) => 
            {
            }).AddHttpMessageHandler<AzureDefaultCredentialsAuthorizationMessageHandler>();

但是当我尝试添加更多例如

 service.AddTransient<IFooService, BFooService>();
            service.AddHttpClient<IFooService, BFooService>((serviceProvider, httpClient) => 
            {
            }).AddHttpMessageHandler<AzureDefaultCredentialsAuthorizationMessageHandler>();

我收到错误

The HttpClient factory already has a registered client with the type 'Project.IFooService'. Client types must be unique. Consider using inheritance to create multiple unique types with the same API surface.

我知道错误是因为我已经注册了 IFooService 来注入 HttpClient,但我不知道如何修复它。

任何建议都会被采纳。

c# dependency-injection httpclient .net-6.0
2个回答
0
投票

您可以通过实例注册输入的

HttpClient

services.AddHttpClient<AFooService>(// ... your setup);

然后,如果您需要“重新抽象”这些接口(假设您需要它们作为集合):

services.AddTransient<IFooService>(sp => sp.GetRequiredService<AFooService>());

0
投票
 public void ConfigureServices(IServiceCollection services, IConfiguration 
  configuration)
    {
        //client to request Worldline services         
       services.AddHttpClient<WorldlineStandardHttpClient>().WithProxy();

//AFTER
    }
public void ConfigureServices(IServiceCollection services, IConfiguration 
      configuration)
        {
            //client to request Worldline services
                  `enter code here`services.AddHttpClient<WorldlineStandardHttpClient>("AnyUnique Name").WithProxy();


        }

更改:我使用了 AddHttpClient 的另一个重载方法,并为其添加了一个名称。它起作用了

© www.soinside.com 2019 - 2024. All rights reserved.