public ObservableValue(TIn value, string name = null, IManipulator manipulator = null, object meta = null) : base(name ?? $"ObservableValue@{States.NextId}") { Meta = meta; Manipulator = manipulator ?? Manipulator <TIn, TOut> .For(); _Value = Manipulator.Enhance(value, default(TIn), Name); }
public bool PrepareNewValue(TIn oldValue, TIn changeValue, out TIn newValue) { this.CheckIfStateModificationsAreAllowed(); newValue = changeValue; if (this.HasInterceptors <IValueWillChange <TIn> >()) { var change = this.NotifyInterceptors(new ValueWillChange <TIn>(newValue, this)); if (change == null) { return(false); } newValue = change.NewValue; } newValue = (TIn)Manipulator.Enhance(newValue, oldValue, Name); return(!EqualityComparer <TIn> .Default.Equals(newValue, oldValue)); }