public void Unsubscribe <T>(IHandle <T> handler) where T : Message { if (_handler == null || _idTracker == null) { return; } if (!ReferenceEquals(handler, (IHandle <T>)_handler)) { throw new ArgumentException("Handler is not current registered handler"); } _bus.Unsubscribe <Message>(_idTracker); _handler = null; _idTracker = null; }
public void Unsubscribe <T>(IHandle <T> handler) where T : Message { if (_handler == null || _idTracker == null) { return; } if (!ReferenceEquals(handler, (IHandle <T>)_handler)) { throw new ArgumentException("Handler is not current registered handler"); } // ReSharper disable once RedundantTypeArgumentsOfMethod _bus.Unsubscribe <Message>(_idTracker); _handler = null; _idTracker = null; }
public IDisposable Subscribe <T>(IHandle <T> handler) where T : Message { if (_idTracker != null) { throw new ArgumentException("Cannot subscribe more than one tracked handler"); } if (typeof(T) != typeof(Message)) { throw new ArgumentException("Only Message type subscriptions supported"); } _handler = handler; _idTracker = new MessageIdTracker((IHandle <Message>)handler, (g) => _trackedMessages.Add(g)); _bus.Subscribe <Message>(_idTracker); return(new SubscriptionDisposer(() => { this?.Unsubscribe(handler); return Unit.Default; })); }
public IDisposable Subscribe <T>(IHandle <T> handler) where T : Message { if (_idTracker != null) { throw new ArgumentException("Cannot subscribe more than one tracked handler"); } if (typeof(T) != typeof(Message)) { throw new ArgumentException("Only Message type subscriptions supported"); } _handler = handler; _idTracker = new MessageIdTracker((IHandle <Message>)handler, (g) => _trackedMessages.Add(g)); // ReSharper disable once RedundantTypeArgumentsOfMethod _bus.Subscribe <Message>(_idTracker); // ReSharper disable once ConstantConditionalAccessQualifier return(new Disposer(() => { this?.Unsubscribe(handler); return Unit.Default; })); }
public BusAdapter(IDispatcher bus) { _idTracker = null; _bus = bus; _trackedMessages = new HashSet <Guid>(); }
public BusAdapter(IGeneralBus bus) { _idTracker = null; _bus = bus; _trackedMessages = new HashSet <Guid>(); }