Использовать HttpClientFactory из.NET 4.6.2
У меня есть консольное приложение .NET 4.6.2 (с использованием Simple Injector). Мне нужно позвонить в службу HTTP. Столкнувшись с проблемами с использованием HttpClient напрямую, я вместо этого пытаюсь использовать HttpClientFactory (https://github.com/aspnet/HttpClientFactory).
Проект/библиотека является .NET Standard 2.0, поэтому он должен?? работать в .NET 4.6.2, но он использует такие вещи, как IServiceCollection, который находится только в Core.
Поэтому мой вопрос заключается в том, могу ли я использовать HttpClientFactory в неосновном приложении.
Ответы
Ответ 1
Все пакеты Microsoft.Extensions. * Предназначены для .NET Standard 2.0. Это означает, что вы можете использовать Dependency Injection, Configuration, Logging и HttpClientFactory, если добавите соответствующий пакет в ваше приложение.
Вам нужно добавить Microsoft.Extensions.Http, чтобы использовать HttpClientFactory и Microsoft.Extensions.Http.Polly, если вы хотите использовать его с Полли
Чтобы настроить HttpClientFactory, вам нужно добавить Microsoft.Extensions.DependencyInjection в ваш "основной" проект. Пакет Microsoft.Extensions.Http зависит только от Microsoft.Extensions.DependencyInjection.Abstractions, который содержит интерфейсы, а не от самого поставщика DI.
Ответ 2
Как сказал @Panagiotis Kanavos, вам нужно добавить Microsoft.Extensions.Http и Microsoft.Extensions.DependencyInjection. И это мой код ConsoleApp, вы можете сослаться на него.
class Program
{
static void Main(string[] args)
{
Test();
Console.Read();
}
static async void Test()
{
var serviceProvider = new ServiceCollection().AddHttpClient().BuildServiceProvider();
var httpClientFactory = serviceProvider.GetService<IHttpClientFactory>();
var client = httpClientFactory.CreateClient();
var response = await client.SendAsync(new HttpRequestMessage(HttpMethod.Get, "http://www.baidu.com"));
var content = await response.Content.ReadAsStringAsync();
Console.WriteLine(content);
}
}