C# 如何在.NETCore2.2的启动文件中注册polly?

C# 如何在.NETCore2.2的启动文件中注册polly?,c#,asp.net,asp.net-core-2.1,circuit-breaker,polly,C#,Asp.net,Asp.net Core 2.1,Circuit Breaker,Polly,我正在我的.NETCore2.2应用程序中实现polly。对于HttpClient,有一个nuget Microsoft.Extenstions.Http.Polly,可用于在启动时注册任何Polly模式(断路器或重试)。但是我怎样才能将polly用于其他异常,比如“SqlException”。 就拿这个区块为例: Policy .Handle<SqlException>(ex => ex.Number == (int)SqlHandledExc

我正在我的.NETCore2.2应用程序中实现polly。对于HttpClient,有一个nuget Microsoft.Extenstions.Http.Polly,可用于在启动时注册任何Polly模式(断路器或重试)。但是我怎样才能将polly用于其他异常,比如“SqlException”。 就拿这个区块为例:

        Policy
        .Handle<SqlException>(ex => ex.Number == (int)SqlHandledExceptions.DatabaseNotCurrentlyAvailable)
        .CircuitBreakerAsync(
            // number of exceptions before breaking circuit
            exceptionsAllowedBeforeBreaking,
            // time circuit opened before retry
            TimeSpan.FromSeconds(30),
            OnBreak,
            OnReset,
            OnHalfOpen)
        .WithPolicyKey($"F1.{PolicyKeys.SqlCircuitBreakerAsyncPolicy}"),
策略
.Handle(ex=>ex.Number==(int)SqlHandledExceptions.DatabaseNotCurrentlyAvailable)
.CircuitBreakerAsync(
//断开电路前的异常数
破译前允许的例外情况,
//重试前电路打开的时间
时间跨度从秒(30),
休息时,
重置时,
(半开)
.WithPolicyKey($“F1.{PolicyKeys.SqlCircuitBreakerAsyncPolicy}”),

我想在启动文件中注册此策略以处理sql异常。我怎样才能做到这一点?

从本质上说,你不能。没有什么可以“注册”;政策就是这样。
IHttpClientFactory
Polly集成特定于
IHttpClientFactory
,在引擎盖下,Polly策略仅围绕
HttpMessageHandler
进行包装


通常,您只需根据正在处理的任何代码定义Polly策略。如果您正在寻找一种共享可重用策略的方法,只需创建一个halper类或其他东西并将其存储在那里。

Polly提供了一个用于维护策略集合的概念

对于不直接与http调用连接的策略,建议的DI方法是在
启动期间
使用策略填充注册表,也在
启动期间
阶段

然后,使用策略的代码只需通过DI获取IReadOnlyPolicyRegistry,然后使用从注册表检索适当的策略



(为了信息的完整性:
PolicyRegistry
方法。)

在sql的情况下也是如此。我需要在查询数据库的每个地方调用块?Polly提供了一个现成的用于存储策略的类:PolicyRegistry(参见下面的答案)