12

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

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

AddHttpClientConfigureServices()in 中执行后Startup.cs,如何将这个HttpClientFactory或特定名称传递HttpClient给我在 .NET Standard 2.0 类库中创建的 API 客户端?这个客户端几乎可以处理我对第三方进行的所有 API 调用。

基本上,我只是想将特定名称HttpClient放入我的thirdPartyApiClient.

这是我的代码ConfigureServices()

public void ConfigureServices(IServiceCollection services)
{
    // Create HttpClient's
    services.AddHttpClient("Api123Client", client =>
    {
         client.BaseAddress = new Uri("https://api123.com/");
         client.DefaultRequestHeaders.Add("Accept", "application/json");
    });
    services.AddHttpClient("Api4567Client", client =>
    {
         client.BaseAddress = new Uri("https://api4567.com/");
         client.DefaultRequestHeaders.Add("Accept", "application/json");
    });
}
4

2 回答 2

30

现在有一个 NuGet 包Microsoft.Extensions.Http将 IHttpClientFactory 提供给 .NET Standard 2.0

于 2020-05-07T06:04:59.273 回答
19

首先,你的库类的构造函数应该接受一个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"));
});
于 2018-04-25T17:53:42.910 回答