2013-11-20 34 views
0

我有一个类CalculationManager,它被BackgroundWorker实例化,因此具有CancellationRequested属性。使父对象中的属性对其包含的任何对象可见

CalculationManagerExecute()方法,实例与自己Execute()方法有些不同Calculation私有类,其通过轮到他们可能会或可能不会实例化一些SubCalculation私有类,在不大不小的“工作分解结构”的方式,其中每个子类实现顺序计算的一部分。

如果某些“全局”CancellationRequested已设置为true,那么我需要做的就是让这些类中的每一个都在它们的Execute()方法(它们彼此不同)的循环内进行检查。我将“全局”放在引号中,因为此属性将位于最上面的CalculationManager类的范围内。

所以,问题是:

我怎样才能使一个类的属性可见每一个(可能是嵌套)的儿童?

或放下另一种方式:

我怎样才能让在其父层次结构的“根对象”的属性的类检查? (当然,不完全的,因为CalculationManager也会有父母,但你得到的总体思路。

我想用某种AttachedProperty,但这些类是一类库内的域对象,一无所有做WPF或XAML和这样。

+0

在我看来,你所要求的工厂模式? – Miller

+0

@MillerKoijam嗯,这是可能的,但我看不出现在怎么样我可以使用工厂模式来获得所需的行为。 ..(?) – heltonbiker

回答

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 
+0

如果我理解正确,我可以创建一个接口或基类,并在构造函数中传入一个“注入父类”,这可能(可能会自动)被注入到同一子类的任何子类中?我的想法是否正确? – heltonbiker

+0

是的;这被称为依赖注入。 –

相关问题