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); } }
/// <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); } }
public void AddHandlerSelector(IEventHandlerSelector eventHandlerSelector) { HandlerSelectors.Add(eventHandlerSelector); }