public static DynamicBool CreateCondition(
     Func <bool> valueCalculation,
     DualLayerNotifier firstAvailibilityConditionChanged,
     params DualLayerNotifier[] args)
 {
     return(new DynamicBool(valueCalculation, firstAvailibilityConditionChanged, args));
 }
 internal DynamicBool(
     Func <bool> valueCalculation,
     DualLayerNotifier firstAvailibilityConditionChanged,
     params DualLayerNotifier[] args)
     : base(valueCalculation, firstAvailibilityConditionChanged, args)
 {
 }
 internal void Unlink(DualLayerNotifier firstAvailibilityConditionChanged, params DualLayerNotifier[] args)
 {
     this.valueCalculation = () => default(TValue);
     firstAvailibilityConditionChanged.ChangeNotificationSent -= DependencyChanged;
     foreach (var notifier in args)
     {
         notifier.ChangeNotificationSent -= DependencyChanged;
     }
     DependencyChanged(null, EventArgs.Empty);
 }
 internal void Link(Func <TValue> valueCalculation, DualLayerNotifier firstAvailibilityConditionChanged, params DualLayerNotifier[] args)
 {
     this.valueCalculation = valueCalculation;
     firstAvailibilityConditionChanged.ChangeNotificationSent += DependencyChanged;
     foreach (var notifier in args)
     {
         notifier.ChangeNotificationSent += DependencyChanged;
     }
     DependencyChanged(null, EventArgs.Empty);
 }
 internal DynamicValue(Func <TValue> valueCalculation, DualLayerNotifier firstAvailibilityConditionChanged, params DualLayerNotifier[] args)
     : this()
 {
     Link(valueCalculation, firstAvailibilityConditionChanged, args);
 }
 public ApplicationLayerEventArgs(DualLayerNotifier notifier)
 {
     Notifier = notifier;
 }