netcoreapp3.1 worker服务项目中如何使用Microsoft.Extensions.Http.Polly

How to use Microsoft.Extensions.Http.Polly in netcoreapp3.1 worker service project

我正在尝试实现以下文章: https://github.com/App-vNext/Polly/wiki/Polly-and-HttpClientFactory

我在我的 Worker Service 项目中使用 HttpFactory 来获取一些数据,我想使用 Microsoft.Extensions.Http.Polly.

使其更健壮

问题是即使安装了软件包,我仍然收到以下错误:

Error CS0234
The type or namespace name 'Polly' does not exist in the namespace 'Microsoft.Extensions.Http' (are you missing an assembly reference?)

<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="..\SolutionLibrary\SolutionLibrary.csproj" />
  </ItemGroup>
</Project>

我错过了什么?

您没有注意到包或程序集名称与代码所在的命名空间不同。尽管通常约定名为“Foo”的包将占用命名空间“Foo”和相关名称空间将类似于“Foo.Bar”等。这不是唯一的方法。

您可以使用对象浏览器找出库为您提供的名称空间和 classes:

  1. 在Visual Studio中,select“查看”
  2. Select“对象浏览器”
  3. 您将看到您的解决方案引用的程序集列表
  4. 向下滚动到“Microsoft.Extensions.Http.Polly”并将其展开

  1. 可以看到它在4个命名空间中声明了代码:
    • Microsoft.Extensions.DependencyInjection
    • Microsoft.Extensions.Http
    • Microsoft.Extensions.Internal
    • 波莉

单击“PollyHttpClientBuilderExtensions”会显示 class 提供的方法:

而且,顾名思义,在下方窗格中显示的方法签名表明selected方法是IHttpClientBuilder上的扩展方法,因此您必须将其与services.AddHttpClient()。这似乎是您想要在代码中访问的那个。因此,您应该包括以下 using:

using Microsoft.Extensions.DependencyInjection;