コード例 #1
0
        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;
        }
コード例 #2
0
        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);
        }
コード例 #3
0
 public DispatcherChannelSubscription(DelegateReference actionReference, DelegateReference filterReference, IDispatcherFacade dispatcher) : base(actionReference, filterReference)
 {
     _dispatcher = dispatcher;
 }