/// <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)); }
/// <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)); }
/// <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)); }