public ChannelSubscription(DelegateReference actionReference, DelegateReference filterReference) { if (actionReference == null) { throw new ArgumentNullException("actionReference"); } if (!(actionReference.Target is Action <TPayload>)) { throw new ArgumentException("InvalidDelegateRerefenceTypeException", "actionReference"); } if (filterReference == null) { throw new ArgumentNullException("filterReference"); } if (!(filterReference.Target is Predicate <TPayload>)) { throw new ArgumentException("InvalidDelegateRerefenceTypeExceptio", "filterReference"); } _actionReference = actionReference; _filterReference = filterReference; }
public static ChannelSubscriptionToken Subscribe <TPayload>(Action <TPayload> action, ThreadOption threadOption, bool keepSubscriberReferenceAlive, Predicate <TPayload> filter) { DelegateReference actionReference = new DelegateReference(action, keepSubscriberReferenceAlive); DelegateReference filterReference; filterReference = filter != null ? new DelegateReference(filter, keepSubscriberReferenceAlive) : new DelegateReference(new Predicate <TPayload>(obj => true), true); ChannelSubscription <TPayload> subscription; switch (threadOption) { case ThreadOption.PublisherThread: subscription = new ChannelSubscription <TPayload>(actionReference, filterReference); break; case ThreadOption.BackgroundThread: // subscription = new BackgroundEventSubscription<TPayload>(actionReference, filterReference); throw new NotImplementedException(); case ThreadOption.UIThread: subscription = new DispatcherChannelSubscription <TPayload>(actionReference, filterReference, UIDispatcher); break; default: subscription = new ChannelSubscription <TPayload>(actionReference, filterReference); break; } //return base.InternalSubscribe(subscription); subscription.SubscriptionToken = new ChannelSubscriptionToken(); lock (_subscriptions) { _subscriptions.Add(subscription); } return(subscription.SubscriptionToken); }
public DispatcherChannelSubscription(DelegateReference actionReference, DelegateReference filterReference, IDispatcherFacade dispatcher) : base(actionReference, filterReference) { _dispatcher = dispatcher; }