我有一个CalculationManager
类,它由BackgroundWorker
实例化,因此具有CancellationRequested
属性。
此CalculationManager
有一个Execute()
方法,它使用自己的Calculation
方法实例化一些不同的Execute()
私有类,这些方法可能会或可能不会实例化某些SubCalculation
私有类,以“工作分解结构”的方式,每个子类实现顺序计算的一部分。
如果设置了一些“全局”Execute()
,我需要做的是让每个类在CancellationRequested
方法的循环中(彼此不同)进行检查为真。我将“全局”放在引号中,因为此属性将位于最顶层CalculationManager
类的范围内。
所以,问题是:
如何在类中为每个(可能是嵌套的)子类创建一个属性?
或放下另一种方式:
如何在其父层次结构的“根对象”中检查属性? (嗯,不完全,因为
CalculationManager
也会有父母,但你有了一般的想法。
我想使用某种AttachedProperty
,但这些类是类库中的域对象,与WPF或XAML等无关。
答案 0 :(得分:1)
这样的东西?
public interface IInjectable {
ICancelStatus Status { get; }
}
public interface ICancelStatus {
bool CancellationRequested { get; }
}
public class CalculationManager {
private IInjectable _injectable;
private SubCalculation _sub;
public CalculationManager(IInjectable injectable) {
_injectable = injectable;
_sub = new SubCalculation(injectable);
}
public void Execute() {}
}
public class SubCalculation {
private IInjectable _injectable;
public SubCalculation(IInjectable injectable) {
_injectable = injectable;
}
}
private class CancelStatus : ICancelStatus {
public bool CancellationRequested { get; set;}
}
var status = new CancelStatus();
var manager = new CalculationManager(status);
manager.Execute();
// once you set status.CancellationRequested it will be immediatly visible to all
// classes into which you've injected the IInjectable instance