Во-первых, следует отметить, что новый MS HttpClientFactory
предназначен для использования в сочетании с ASP.NET Core 2.1 и его встроенным контейнером DI. Если вы не вводите FlurlClient
s в контроллеры или классы обслуживания и вместо этого используете Flurl следующим образом:
await url.GetJsonAsync();
тогда это даже не актуально. Вы должны не реализовать IHttpClientFactory Flurl , чтобы использовать MS. У него нет подходящего контекста для использования контейнера DI, и вы в конечном итоге прибегнете к сервисному расположению, которое является анти-паттерном. Эти новые функции пула сокетов, которые вы хотите использовать в действительности, живут на более низком уровне: System.Net.Http.SocketsHttpHandler
. Flurl по умолчанию использует HttpClientHander
в качестве обработчика сообщений, но, к счастью, он был переписан в .NET Core 2.1 для переноса всей его работы на SocketsHttpHandler
по умолчанию. Другими словами, если вы используете Flurl в приложении .NET Core 2.1, вы уже получаете все новые возможности управления сокетами, над которыми MS работает над .
Если вы явно используете FlurlClient
в приложении ASP.NET Core 2.1 как своего рода замену HttpClient
и хотели бы внедрить его в свои классы, воспользовавшись тем, что HttpClientFactory
от MS предлагает, я бы предложил настроить HttpClientFactory
в ConfigureServices
точно так, как предписано MS, а когда вам нужен экземпляр FlurlClient
, используйте конструктор, который принимает экземпляр HttpClient
. Например, при использовании шаблона типизированных клиентов ваш класс обслуживания может выглядеть следующим образом:
public class MyService
{
private readonly IFlurlClient _flurlClient;
public MyService(HttpClient httpClient)
{
_flurlClient = new FlurlClient(httpClient);
}
}