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);
}
我正在尝试在基础 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);
}