Exemplo n.º 1
0
 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;
 }
Exemplo n.º 2
0
 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; }));
 }
Exemplo n.º 3
0
 public BusAdapter(IGeneralBus bus)
 {
     _idTracker       = null;
     _bus             = bus;
     _trackedMessages = new HashSet <Guid>();
 }