/// <summary> /// Subscribe to value changes. Changing internal values for wrapped complex objects, won't trigger the callback. /// The OnNext is also called imediately after you subscribe, to provide the current value. /// </summary> /// <param name="callback">The object that will listen for changes, implemeting IObserver<T></param> /// <returns>A subscription reference</returns> public IDisposable Subscribe(ValueProviderCallback <T> callback) { if (_callbacks.IndexOf(callback) >= 0) { throw new InvalidOperationException("Observer was already added to the observers list"); } _callbacks.Add(callback); callback.Invoke(this); return(new Subscription <T>(_callbacks, callback)); }
public Subscription(List <ValueProviderCallback <T> > observers, ValueProviderCallback <T> observer) { _callbacks = observers; _observer = observer; }
/// <summary> /// Unsubscribe the observer from further value changes. /// </summary> /// <param name="callback">The callback to be removed</param> public void Unsubscribe(ValueProviderCallback <T> callback) { _callbacks.Remove(callback); }