/// <summary>
        /// Create a new <see cref="EventHandlerGroup{T}"/> that combines the <see cref="IEventHandler{T}"/> in this group with
        /// input handlers.
        /// </summary>
        /// <param name="handlers">the handlers to combine.</param>
        /// <returns>a new <see cref="EventHandlerGroup{T}"/> combining the existing and new handlers into a single dependency group.</returns>
        public EventHandlerGroup <T> And(params IEventHandler <T>[] handlers)
        {
            var processors = from handler in handlers
                             select _eventProcessorRepository.GetEventProcessorFor(handler);

            var combindedProcessors = _eventProcessors.Concat(processors).ToArray();

            return(new EventHandlerGroup <T>(_disruptor, _eventProcessorRepository, combindedProcessors));
        }
Esempio n. 2
0
        /// <summary>
        /// Create a group of <see cref="IEventHandler{T}"/>s to be used as a dependency.
        /// </summary>
        /// <param name="handlers">the <see cref="IEventHandler{T}"/>s, previously set up with <see cref="HandleEventsWith(Disruptor.IEventHandler{T}[])"/>,
        ///                        that will form the <see cref="ISequenceBarrier"/> for subsequent handlers or processors.
        /// </param>
        /// <returns>an <see cref="EventHandlerGroup{T}"/> that can be used to setup a <see cref="ISequenceBarrier"/> over the specified <see cref="IEventHandler{T}"/>s.</returns>
        public EventHandlerGroup <T> After(params IEventHandler <T>[] handlers)
        {
            var selectedEventProcessors = new IEventProcessor[handlers.Length];

            for (int i = 0; i < handlers.Length; i++)
            {
                selectedEventProcessors[i] = _eventProcessorRepository.GetEventProcessorFor(handlers[i]);
            }

            return(new EventHandlerGroup <T>(this, _eventProcessorRepository, selectedEventProcessors));
        }