Пример #1
0
        /// <summary>
        /// Registra o delegate de um evento.
        /// </summary>
        /// <param name="action">Instancia da ação que será registrada.</param>
        /// <param name="threadOption">Opção de thread para o acionamento da ação.</param>
        /// <param name="keepSubscriberReferenceAlive">Quando <see langword="true"/>, a instancia
        /// mantem uma regerencia da inscrição que não será capturada pelo garbage collected.</param>
        /// <param name="filter">Predicado do filtro para acionar o evento registrado.</param>
        /// <param name="allowCallReentrance"><see langword="true"/> identifica que permite rechamada da ação.</param>
        /// <param name="name">Nome da assinatura.</param>
        /// <returns>Token da inscrição.</returns>
        public virtual SubscriptionToken Subscribe(Action <TPayload> action, DomainEventThreadOption threadOption, bool keepSubscriberReferenceAlive, Predicate <TPayload> filter, bool allowCallReentrance = false, string name = null)
        {
            IDelegateReference actionReference = new DelegateReference(action, keepSubscriberReferenceAlive);
            IDelegateReference filterReference;

            if (filter != null)
            {
                filterReference = new DelegateReference(filter, keepSubscriberReferenceAlive);
            }
            else
            {
                filterReference = new DelegateReference(new Predicate <TPayload>(delegate {
                    return(true);
                }), true);
            }
            DomainEventSubscription <TPayload> subscription;

            switch (threadOption)
            {
            case DomainEventThreadOption.PublisherThread:
                subscription = new DomainEventSubscription <TPayload>(actionReference, filterReference, allowCallReentrance, name);
                break;

            case DomainEventThreadOption.BackgroundThread:
                subscription = new BackgroundEventSubscription <TPayload>(actionReference, filterReference, allowCallReentrance, name);
                break;

            case DomainEventThreadOption.DispatcherThread:
                subscription = new DispatcherEventSubscription <TPayload>(actionReference, filterReference, allowCallReentrance, Dispatcher, name);
                break;

            default:
                subscription = new DomainEventSubscription <TPayload>(actionReference, filterReference, allowCallReentrance, name);
                break;
            }
            return(base.InternalSubscribe(subscription));
        }
Пример #2
0
 /// <summary>
 /// Registra o delegate para o evento.
 /// </summary>
 /// <param name="action">Instancia da ação que será registrada.</param>
 /// <param name="threadOption">Opção de thread para o acionamento da ação.</param>
 /// <param name="keepSubscriberReferenceAlive">Quando <see langword="true"/>, a instancia
 /// mantem uma regerencia da inscrição que não será capturada pelo garbage collected.</param>
 /// <returns>Token da inscrição.</returns>
 public SubscriptionToken Subscribe(Action <TPayload> action, DomainEventThreadOption threadOption, bool keepSubscriberReferenceAlive)
 {
     return(Subscribe(action, threadOption, keepSubscriberReferenceAlive, null));
 }
Пример #3
0
 /// <summary>
 /// Registra o delegate para o evento.
 /// </summary>
 /// <param name="action">Instancia da ação que será registrada.</param>
 /// <param name="threadOption">Opção de thread para o acionamento da ação.</param>
 /// <returns>Token da inscrição.</returns>
 public SubscriptionToken Subscribe(Action <TPayload> action, DomainEventThreadOption threadOption)
 {
     return(Subscribe(action, threadOption, false));
 }