示例#1
0
        private static void CreateEventHandlerSelectorTracer(ProcessorConfiguration configuration, ITraceWriter traceWriter)
        {
            Contract.Requires(configuration != null);

            IEventHandlerSelector selector = GetService <IEventHandlerSelector>(configuration.Services);

            if (selector != null && !(selector is EventHandlerSelectorTracer))
            {
                EventHandlerSelectorTracer tracer = new EventHandlerSelectorTracer(selector, traceWriter);
                configuration.Services.Replace(typeof(IEventHandlerSelector), tracer);
            }
        }
示例#2
0
        /// <summary>
        /// Execute the request via the worker.
        /// </summary>
        /// <param name="request">The <see cref="EventHandlerRequest"/> to execute.</param>
        /// <param name="cancellationToken">The <see cref="CancellationToken"/> to cancel the execution.</param>
        /// <returns>The <see cref="Task"/> of the event.</returns>
        public async Task PublishAsync(EventHandlerRequest request, CancellationToken cancellationToken)
        {
            if (request == null)
            {
                throw Error.ArgumentNull("request");
            }

            IEventHandlerSelector handlerSelector = this.Configuration.Services.GetEventHandlerSelector();

            EventHandlersDescriptor eventDescriptor = handlerSelector.SelectHandlers(request);

            var descriptors = eventDescriptor.EventHandlerDescriptors;

            for (int i = 0; i < descriptors.Count; i++)
            {
                await InvokeHandlerAsync(descriptors[i], request, cancellationToken);
            }
        }
示例#3
0
 public void AddHandlerSelector(IEventHandlerSelector eventHandlerSelector)
 {
     HandlerSelectors.Add(eventHandlerSelector);
 }