Передача IHttpClientFactory в библиотеку классов .NET Standard - PullRequest
0 голосов
/ 25 апреля 2018

В новом ASP.NET Core 2.1 https://www.hanselman.com/blog/HttpClientFactoryForTypedHttpClientInstancesInASPNETCore21.aspx

есть действительно классная IHttpClientFactory функция. Я пытаюсь использовать эту функцию в своем приложении ASP.NET Core 2.1 Preview-2, но мне нужноиспользовать HttpClient в моих библиотеках классов, которые находятся в .NET Standard 2.0

Как только я выполню AddHttpClient в ConfigureServices() в Startup.cs, как мне передать это HttpClientFactory или конкретное имяHttpClient клиенту API, который я создал в моей библиотеке классов .NET Standard 2.0?Этот клиент в значительной степени обрабатывает все вызовы 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");
    });
}

1 Ответ

0 голосов
/ 25 апреля 2018

Во-первых, конструктор вашего библиотечного класса должен принять параметр 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"));
});
...