我需要将 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,但我不知道如何修复它。
任何建议都会被采纳。
您可以通过实例注册输入的
HttpClient
:
services.AddHttpClient<AFooService>(// ... your setup);
然后,如果您需要“重新抽象”这些接口(假设您需要它们作为集合):
services.AddTransient<IFooService>(sp => sp.GetRequiredService<AFooService>());
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 的另一个重载方法,并为其添加了一个名称。它起作用了