public void AddSubscriber(IPubSubSubscriberInterface _Subscriber, Actions.EAction _Action) { lock (Observers) { if (Observers.ContainsKey(_Action)) { var RelevantList = Observers[_Action]; foreach (var Weak in RelevantList) { if (Weak.TryGetTarget(out IPubSubSubscriberInterface Strong) && Strong == _Subscriber) { return; } } RelevantList.Add(new WeakReference <IPubSubSubscriberInterface>(_Subscriber)); } else { Observers[_Action] = new List <WeakReference <IPubSubSubscriberInterface> >() { new WeakReference <IPubSubSubscriberInterface>(_Subscriber) }; } } }
public bool RemoveSubscriber(IPubSubSubscriberInterface _Subscriber, Actions.EAction _Action) { lock (Observers) { if (Observers.ContainsKey(_Action)) { var Counter = 0; foreach (var Weak in Observers[_Action]) { if (Weak.TryGetTarget(out IPubSubSubscriberInterface Strong) && Strong == _Subscriber) { Observers[_Action].RemoveAt(Counter); return(true); } Counter++; } } return(false); } }