Asp.Net Core 3.0 使用 HttpClientFactory 和 Autofac

mar*_*onx 5 autofac asp.net-core

我有一个非常默认的 Asp.Net Core 3.0 RestAPI 应用程序。对于内部的某些服务,我想使用 Asp.Net Core 的内置 HttpClientFactory。

所以我在ConfigureServices 的Startup.cs 中有这些

services.AddHttpClient<IService1, Service1>(client =>
{
     client.Timeout = TimeSpan.FromSeconds(30);
});
services.AddHttpClient<IService2, Service2>(client =>
{
     client.Timeout = TimeSpan.FromSeconds(120);
});
Run Code Online (Sandbox Code Playgroud)

我的服务构造函数之一如下所示:

protected Service1(HttpClient client)
{
    this.client = client;
}
Run Code Online (Sandbox Code Playgroud)

在我的 Startup.cs 中,我有 Autofac 的 DI 配置部分:

public void ConfigureContainer(ContainerBuilder builder)
{
    builder.RegisterType<Service1>().As<IService1>();
    builder.RegisterType<Service2>().As<IService2>();
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,这不起作用,因为 Autofac 不知道配置服务中的 MS DI 基础 HttpClientFactory 设置。我应该配置什么才能将 Asp.Net Core HttpClientFactory 与 Autofac 结合使用?

我也尝试了这个建议:Autofac无法解析可枚举的类型化HttpClients

mar*_*onx 0

我成功地使用命名配置解决了这个问题。

在 Startup.cs 中

services.AddHttpClient("sampleClient", client =>
{
    client.Timeout = TimeSpan.FromSeconds(120);
});
Run Code Online (Sandbox Code Playgroud)

在Service.cs构造函数中

public Service(IHttpClientFactory httpClientFactory)
{
    client = httpClientFactory.CreateClient("sampleClient");
}
Run Code Online (Sandbox Code Playgroud)