0

我正在使用这个使用 polly 进行重试的小巧扩展。

我们可以看到它定义了一个静态重试策略:

private static readonly AsyncRetryPolicy RetryPolicy = 
    Policy
        .Handle<SqlException>(SqlServerTransientExceptionDetector.ShouldRetryOn)
        .Or<TimeoutException>()
        .OrInner<Win32Exception>(SqlServerTransientExceptionDetector.ShouldRetryOn)
        .WaitAndRetryAsync(RetryTimes,
            (exception, timeSpan, retryCount, context) =>
            {
                LogTo.Warning(
                    exception,
                    "WARNING: Error talking to ReportingDb, will retry after {RetryTimeSpan}. Retry attempt {RetryCount}",
                    timeSpan,
                    retryCount
                );
            });

理想情况下,我想进行RetryTimes设置。但是,我不确定如何传递IConfigurationRetryTimes静态属性?

我能想到的工作是将 polly 策略定义为单例(这样我就可以读取设置)。然后在这个扩展方法中,我实际上传递了策略。这是在 .NET Core 中处理它的正确方法吗?

4

1 回答 1

0

我认为创建一个地方来保存设置并在使用之前分配给它会很好。

// Create the holder class
public static class SettingHolder
{
    public static int RetryTimes = 0;
}

// Assign to it before you going to use it, in startup file would be nice.
public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers();
            SettingHolder.RetryTimes = int.Parse(Configuration.GetSection("YourSection")["GoToYourSetting"]);
        }
于 2021-08-16T15:59:12.900 回答