using System; using System.Collections.Generic; using System.Reactive.Linq; using System.Reactive.Subjects; using xModels.Interfaces; namespace xModels.Base { public abstract class XBaseStoreEvent : IXBaseStoreEvents where T : XBaseStorableDto { // private readonly ISubject> onAddSubject; private readonly ISubject> onUpdateSubject; private readonly ISubject> onRemoveSubject; // private readonly ISubject>> onAddManySubject; private readonly ISubject>> onUpdateManySubject; private readonly ISubject>> onRemoveManySubject; // public IObservable> OnAddObservable => onAddSubject.AsObservable(); public IObservable> OnUpdateObservable => onUpdateSubject.AsObservable(); public IObservable> OnRemoveObservable => onRemoveSubject.AsObservable(); // public IObservable>> OnAddManyObservable => onAddManySubject.AsObservable(); public IObservable>> OnUpdateManyObservable => onUpdateManySubject.AsObservable(); public IObservable>> OnRemoveManyObservable => onRemoveManySubject.AsObservable(); // protected XBaseStoreEvent() { // onAddSubject = new ReplaySubject>(1); onUpdateSubject = new ReplaySubject>(1); onRemoveSubject = new ReplaySubject>(1); // onAddManySubject = new ReplaySubject>>(1); onUpdateManySubject = new ReplaySubject>>(1); onRemoveManySubject = new ReplaySubject>>(1); } // #region Base Actions ... public void AddEvent(XBaseStorableDtoEventModel model) { onAddSubject.OnNext(model); } public void AddManyEvent(XBaseStorableDtoEventModel> model) { onAddManySubject.OnNext(model); } public void RemoveEvent(XBaseStorableDtoEventModel model) { onRemoveSubject.OnNext(model); } public void RemoveManyEvent(XBaseStorableDtoEventModel> model) { onRemoveManySubject.OnNext(model); } public void UpdateEvent(XBaseStorableDtoEventModel model) { onUpdateSubject.OnNext(model); } public void UpdateManyEvent(XBaseStorableDtoEventModel> model) { onUpdateManySubject.OnNext(model); } #endregion } }