【发布时间】:2021-03-16 11:11:40
【问题描述】:
我正在尝试使用 IHttpClientFactory。我读过文章https://docs.microsoft.com/en-us/aspnet/core/fundamentals/http-requests?view=aspnetcore-3.0 启动.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddHttpClient();
services.AddSingleton<INasaStream, NasaStream>();
services.AddSingleton<INasaProvider, NasaProvider>();
}
// another methods remove for clearance
NasaStream.cs
public class NasaStream : INasaStream
{
// some variables declaration
public NasaStream(IOptions<AppSettings> options, HttpClient _client, ILogger<NasaProvider> _logger)
{
settings = options.Value;
client = _client;
logger = _logger;
}
}
编译没有错误。但是当我尝试运行我的应用程序时,出现了错误:
未处理的异常。 System.AggregateException:无法构造某些服务(验证服务描述符'ServiceType:时出错: Mars.INasaStream Lifetime: Singleton ImplementationType: Mars.NasaStream': 尝试激活'Mars.NasaStream'时无法解析类型'System.Net.Http.HttpClient'的服务。)(验证服务描述符'ServiceType: Mars时出错.INasaProvider 生命周期:单例实施类型: Mars.NasaProvider':尝试激活'Mars.NasaStream'时无法解析类型'System.Net.Http.HttpClient'的服务。)(验证服务描述符'ServiceType:Mars.SolDataQuery Lifetime:Singleton ImplementationType:Mars时出错.SolDataQuery':尝试激活“Mars.NasaStream”时,无法解析“System.Net.Http.HttpClient”类型的服务。)
为什么我做错了?
【问题讨论】:
-
如果改为使用 IHttpClientFactory 会怎样?
-
您可以使用类型化客户端
services.AddHttpClient<INasaStream, NasaStream>();并删除services.AddSingleton<INasaStream, NasaStream>();由于提供者是单例的,因此临时客户端将成为强制依赖。 -
@Nkosi 我试过了。我使用 vs code 1.53 并且在运行命令“dotnet run”之后什么也没发生。我等待了大约 5 分钟(而不是 20-30 秒),但我没有看到任何错误,没有结果。看起来系统挂了。
-
@Magnus 我试过了。但是就像我上面描述的情况一样:我使用 vs 代码 1.53 并且在运行命令“dotnet run”之后什么也没发生。我等待了大约 5 分钟(而不是 20-30 秒),但我没有看到任何错误,没有结果。看起来系统挂了。
标签: c# .net-core-3.0