繁体   English   中英

基类中的 Polly 使用参数执行抽象方法

[英]Polly in base class execute abstract method with paramter

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

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);
}

我如何实现这一目标?

这可以通过标准抽象类模式来解决。 解决方案没有特别不同,因为波莉参与其中。

您可以添加到基类:

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

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

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

这使用了抽象方法,但您也可以使用抽象属性; 或在基类上定义的 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);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM