Files
xDataService/Providers/XBaseRepositoryEvents.cs
T
2026-05-15 02:51:02 +03:30

63 lines
2.8 KiB
C#

using System;
using System.Collections.Generic;
using System.Reactive.Linq;
using System.Reactive.Subjects;
using xDataService.Interfaces;
using xDataService.Models;
namespace xDataService.Providers {
/// <summary>
/// Some Events can be Raised on Some Actions Happens on Repositories ...
/// this is the Base Events Class ...
/// </summary>
/// <typeparam name="T"></typeparam>
public abstract class XBaseRepositoryEvents<T> : IXBaseRepositoryEvents<T> {
//
private readonly ISubject<XBaseEventModel<T>> onAddSubject;
private readonly ISubject<XBaseEventModel<T>> onUpdateSubject;
private readonly ISubject<XBaseEventModel<T>> onRemoveSubject;
//
private readonly ISubject<XBaseEventModel<IEnumerable<T>>> onAddManySubject;
private readonly ISubject<XBaseEventModel<IEnumerable<T>>> onUpdateManySubject;
private readonly ISubject<XBaseEventModel<IEnumerable<T>>> onRemoveManySubject;
//
protected XBaseRepositoryEvents () {
//
onAddSubject = new ReplaySubject<XBaseEventModel<T>> (1);
onUpdateSubject = new ReplaySubject<XBaseEventModel<T>> (1);
onRemoveSubject = new ReplaySubject<XBaseEventModel<T>> (1);
//
onAddManySubject = new ReplaySubject<XBaseEventModel<IEnumerable<T>>> (1);
onUpdateManySubject = new ReplaySubject<XBaseEventModel<IEnumerable<T>>> (1);
onRemoveManySubject = new ReplaySubject<XBaseEventModel<IEnumerable<T>>> (1);
}
//
public void AddEvent (XBaseEventModel<T> model) => onAddSubject.OnNext (model);
public void UpdateEvent (XBaseEventModel<T> model) => onUpdateSubject.OnNext (model);
public void RemoveEvent (XBaseEventModel<T> model) => onRemoveSubject.OnNext (model);
//
public void AddManyEvent (XBaseEventModel<IEnumerable<T>> model) => onAddManySubject.OnNext (model);
public void UpdateManyEvent (XBaseEventModel<IEnumerable<T>> model) => onUpdateManySubject.OnNext (model);
public void RemoveManyEvent (XBaseEventModel<IEnumerable<T>> model) => onRemoveManySubject.OnNext (model);
//
public IObservable<XBaseEventModel<T>> OnAddObservable => onAddSubject.AsObservable ();
public IObservable<XBaseEventModel<T>> OnUpdateObservable => onUpdateSubject.AsObservable ();
public IObservable<XBaseEventModel<T>> OnRemoveObservable => onRemoveSubject.AsObservable ();
//
public IObservable<XBaseEventModel<IEnumerable<T>>> OnAddManyObservable => onAddManySubject.AsObservable ();
public IObservable<XBaseEventModel<IEnumerable<T>>> OnUpdateManyObservable => onUpdateManySubject.AsObservable ();
public IObservable<XBaseEventModel<IEnumerable<T>>> OnRemoveManyObservable => onRemoveManySubject.AsObservable ();
}
}