【问题标题】:Unable to resolve dependency HttpClient in net.core 3.0无法解决 net.core 3.0 中的依赖 HttpClient
【发布时间】: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&lt;INasaStream, NasaStream&gt;(); 并删除 services.AddSingleton&lt;INasaStream, NasaStream&gt;(); 由于提供者是单例的,因此临时客户端将成为强制依赖。
  • @Nkosi 我试过了。我使用 vs code 1.53 并且在运行命令“dotnet run”之后什么也没发生。我等待了大约 5 分钟(而不是 20-30 秒),但我没有看到任何错误,没有结果。看起来系统挂了。
  • @Magnus 我试过了。但是就像我上面描述的情况一样:我使用 vs 代码 1.53 并且在运行命令“dotnet run”之后什么也没发生。我等待了大约 5 分钟(而不是 20-30 秒),但我没有看到任何错误,没有结果。看起来系统挂了。

标签: c# .net-core-3.0


【解决方案1】:

好吧,那是我的错误。我看不到错误和调试日志,因为我把它们关掉了。这并不意味着我的代码不起作用。 正确答案由@Nkosi 完成

public void ConfigureServices(IServiceCollection services)
    {

        services.AddHttpClient<INasaStream, NasaStream>();
        ...
    }

我应该使用类型化的客户端,仅此而已

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-06
    • 2012-10-12
    • 2021-08-11
    • 2016-02-16
    • 2017-04-27
    • 2021-01-04
    • 2017-11-12
    相关资源
    最近更新 更多