.Net Использование IHttpClientFactory с Singleton

Итак, если у меня есть класс, зарегистрированный через DI как единственный экземпляр (Singleton), я вставляю IHttpClientFactory внутри класса.

 class MyService : IMyService
    {
        private readonly IHttpClientFactory _clientFactory;

        public MyService(IHttpClientFactory clientFactory)
        {
            _clientFactory = clientFactory;
        }
        public async Task Call()
        {
            var client = _clientFactory.CreateClient("MyClient");
            await client.SendAsync(new HttpRequestMessage(HttpMethod.Get, "http://test.com"));
        }
    }

Верно ли, что при каждом вызове функции Call я создаю нового клиента, используя _clientFactory.CreateClient? или я должен создать одного клиента в конструкторе с фабрикой, а затем повторно использовать его для каждого вызова функции?

Спасибо


person Christian Pace    schedule 08.07.2021    source источник


Ответы (1)


Вы можете создавать клиента каждый раз, когда вызываете MyService.Call() метод. Нет необходимости утилизировать его, когда вы закончите с ним. IHttpClientFactory управляет ресурсами, используемыми HttpClients для вас.

Из документы:

Новый экземпляр HttpClient возвращается каждый раз, когда CreateClient вызывается на IHttpClientFactory. HttpMessageHandler создается для каждого названного клиента. Фабрика управляет сроками жизни HttpMessageHandler экземпляров.

IHttpClientFactory объединяет HttpMessageHandler экземпляров, созданных фабрикой, для снижения потребления ресурсов. Экземпляр HttpMessageHandler может быть повторно использован из пула при создании нового HttpClient экземпляра, если его время жизни не истекло.

...

HttpClient экземпляры обычно можно рассматривать как объекты .NET, не требующие удаления. Disposal отменяет исходящие запросы и гарантирует, что данный экземпляр HttpClient не может быть использован после вызова Dispose. IHttpClientFactory отслеживает и распределяет ресурсы, используемые HttpClient экземплярами.

Сохранение единственного HttpClient экземпляра в течение длительного времени - распространенный шаблон, использовавшийся до начала IHttpClientFactory. Этот шаблон становится ненужным после перехода на IHttpClientFactory.

person abdusco    schedule 08.07.2021