将IHttpClientFactory传递给.NET Standard类库

时间:2018-04-25 17:20:28

标签: asp.net-core .net-standard-2.0 httpclientfactory

新的ASP.NET Core 2.1中有一个非常酷的IHttpClientFactory功能 https://www.hanselman.com/blog/HttpClientFactoryForTypedHttpClientInstancesInASPNETCore21.aspx

我试图在我的ASP.NET Core 2.1 Preview-2应用程序中使用此功能,但我需要使用.NET Standard 2.0中的类库中的HttpClient

我在AddHttpClient的{​​{1}}中执行ConfigureServices()后,如何将此Startup.cs或特定的HttpClientFactory传递给我在其中创建的API客户端我的.NET Standard 2.0类库?这个客户端几乎处理我向第三方发出的所有API调用。

基本上,我只是想将特定的HttpClient命名为HttpClient

这是thirdPartyApiClient中的代码:

ConfigureServices()

2 个答案:

答案 0 :(得分:13)

如今,有一个NuGet软件包Microsoft.Extensions.Http,它将IHttpClientFactory提供给.NET Standard 2.0

答案 1 :(得分:6)

首先,您的图书馆班级'构造函数应该使用HttpClient参数,因此您可以向其中注入HttpClient。然后,最简单的方法(在链接文章中提到它以及它的价值)就是为该库类添加一个特定的HttpClient

services.AddHttpClient<MyLibraryClass>(...);

然后,当然,如果您还没有注册您的图书馆类注射:

services.AddScoped<MyLibraryClass>();

然后,当您的库类被实例化以注入某些内容时,它也将被注入您为其指定的HttpClient

或者,您可以通过以下方式手动指定要注入的HttpClient实例:

services.AddScoped(p => {
    var httpClientFactory = p.GetRequiredService<IHttpClientFactory>();
    return new MyLibraryClass(httpClientFactory.Create("Foo"));
});