Polly in base class 执行带有参数的抽象方法

Polly in base class execute abstract method with paramter

我正在尝试在基础 class 中添加 Polly 策略。问题是我想重试的方法是一个带有参数的抽象方法,而子 classes 定义了那个参数。代码示例:

public abstract class BaseClass
{   
    protected BaseClass()
    {
        // original code
        // someEvent += OnChange;
        someEvent += OnChangeBase;      
    }

    private void OnChangeBase()
    {
        var policy = GetRetryPolicy();
        // how do I use the bool parameter from children class?
        policy.Execute(() => OnChange(??));
    }

    protected abstract void OnChange(bool param);
}

如何实现?

这可以通过标准抽象 class 模式来解决。解决方案并没有特别不同,因为涉及 Polly。

您可以直接添加到基数 class:

protected abstract bool GetBoolParameterValue(); // choose a name more meaningful to your use case

然后通过策略执行的代码行变为:

policy.Execute(() => OnChange(GetBoolParameterValue()));

这使用了抽象方法,但您也可以使用抽象方法 属性;或在基础 class.

上定义的 bool 字段

或者:问题提出OnChangeBase的签名是OnChangeBase()。但是如果OnChange的原始签名是OnChange(bool),你可以这样做吗?

public abstract class BaseClass
{   
    protected BaseClass()
    {
        // original code
        // someEvent += OnChange;
        someEvent += OnChangeBase;      
    }

    private void OnChangeBase(bool foo)
    {
        var policy = GetRetryPolicy();
        policy.Execute(() => OnChange(foo));
    }

    protected abstract void OnChange(bool param);
}