IHttpClientFactory для полного фреймворка (4.7) и IoC

#inversion-of-control #.net-4.7.2 #httpclientfactory #ihttpclientfactory

#инверсия управления #.net-4.7.2 #httpclientfactory #ihttpclientfactory

Вопрос:

Я пытаюсь зарегистрировать IHttpClientFactory в полной среде 4.7 (не основной). Я использую контейнер IoC (LightInject)

Проблема в том, что у меня нет прямого доступа к реализации внутреннего класса DefaultHttpClientFactory https://github.com/dotnet/runtime/blob/master/src/libraries/Microsoft .Расширения.Http/src/DefaultHttpClientFactory.cs Этот класс не виден, поскольку он не является общедоступным. Я нашел решение в качестве сторонней реализации — https://github.com/uhaciogullari/HttpClientFactoryLite , бит он использует свой собственный интерфейс.

Можно ли использовать интерфейс IHttpClientFactory с IoC для полной платформы (не .net core)?

В случае, если это возможно, какой класс я могу использовать в качестве реализации для IHttpClientFactory во время регистрации для IoC?

Ответ №1:

Как было предложено в этом выпуске github, вы можете использовать это:

 var serviceProvider = new ServiceCollection().AddHttpClient().BuildServiceProvider();
container.RegisterInstance(serviceProvider.GetService<IHttpClientFactory>());
container.ContainerScope.RegisterForDisposal(serviceProvider);
 
  • AddHttpClient регистрирует DefaultHttpClientFactory для IHttpClientFactory
  • Затем вы можете извлечь его из контейнера DI

В этом примере используется SimpleInjector , но та же концепция может быть применена для любого другого фреймворка DI.