public void Subscribe(INotificationEventObserver observer) { lock (@lock) { observers.Add(new WeakReference <INotificationEventObserver>(observer)); } }
public void Unsubscribe(INotificationEventObserver observer) { lock (@lock) { for (int i = 0; i < observers.Count; i++) { if (observers[i].TryGetTarget(out var tgt) == false) { observers.RemoveAt(i--); continue; } if (ReferenceEquals(tgt, observer)) { observers.RemoveAt(i--); } } } }