Как использовать Microsoft.Extensions.Http.Polly в проекте рабочей службы netcoreapp3.1

#c# #.net-core #polly

Вопрос:

Я пытался реализовать следующую статью: https://github.com/App-vNext/Polly/wiki/Polly-and-HttpClientFactory

Я использую HttpFactory в своем проекте рабочей службы для получения некоторых данных, я хочу сделать его более надежным Microsoft.Extensions.Http.Polly .

Проблема в том, что я продолжаю получать следующую ошибку, даже несмотря на то, что пакет установлен :

Ошибка CS0234
Имя типа или пространства имен ‘Polly’ не существует в пространстве имен ‘Microsoft.Расширения.Http’ (вам не хватает ссылки на сборку?)

 <Project Sdk="Microsoft.NET.Sdk.Worker">

  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.Extensions.Hosting" Version="5.0.0" />
    <PackageReference Include="Microsoft.Extensions.Http" Version="5.0.0" />
    <PackageReference Include="Microsoft.Extensions.Http.Polly" Version="5.0.0" />
    <PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..SolutionLibrarySolutionLibrary.csproj" />
  </ItemGroup>
</Project>
 

введите описание изображения здесь

Что я пропустил?

Комментарии:

1. Пожалуйста, не включайте решение в свой вопрос. Пожалуйста, оставьте для этого отдельный пост.

Ответ №1:

Вы упускаете из виду, что имя пакета или сборки не совпадает с именами имен, в которых находится код. Хотя часто принято считать, что пакет с именем «Foo» будет занимать пространство имен «Foo», а связанные пространства имен будут чем-то вроде «Foo.Bar» и т. Д. это не единственный способ сделать это.

Вы можете узнать, какие пространства имен и классы предоставляет вам библиотека, используя обозреватель объектов:

  1. В Visual Studio выберите «Просмотр»
  2. Выберите «Обозреватель объектов»
  3. Вы увидите список сборок, на которые ссылается ваше решение
  4. Прокрутите вниз до «Microsoft.Extensions.Http.Polly» и разверните его

введите описание изображения здесь

  1. Вы можете видеть, что он объявляет код в 4 пространствах имен:
    • Майкрософт.Расширения.DependencyInjection
    • Майкрософт.Расширения.Http
    • Майкрософт.Расширения.Внутренний
    • Polly

Нажатие на «PollyHttpClientBuilderExtensions» показывает методы, доступные классу:

введите описание изображения здесь

И, как следует из названия, сигнатура метода, отображаемая на нижней панели, указывает, что выбранный метод является методом расширения on IHttpClientBuilder , поэтому вы должны использовать его в сочетании с. services.AddHttpClient() Кажется вероятным, что это тот, к которому вы хотите получить доступ в своем коде. Поэтому вы должны включить следующее using :

 using Microsoft.Extensions.DependencyInjection;
 

Комментарии:

1. Большое вам спасибо, я провел еще несколько исследований после вашего понимания и заставил его работать! Добавлен рабочий код в сообщение для дальнейшего использования