Ejemplo n.º 1
0
        /// <summary>
        /// Registers a dynamic event handler.
        /// </summary>
        /// <typeparam name="TEvent">The type of the <see cref="IEvent"/>.</typeparam>
        /// <param name="config">The configuration.</param>
        /// <param name="handler">The <see cref="Func{TEvent, Task}"/> delegate.</param>
        public static void RegisterEventHandler <TEvent>(this ProcessorConfiguration config, Func <TEvent, Task> handler) where TEvent : IEvent
        {
            if (config == null)
            {
                throw Error.ArgumentNull("config");
            }

            if (handler == null)
            {
                throw Error.ArgumentNull("handler");
            }

            var  descriptorProvider = config.Services.GetEventHandlerDescriptorProvider();
            var  mapping            = descriptorProvider.GetHandlerMapping();
            Type eventType          = typeof(TEvent);
            EventHandlersDescriptor descriptors;

            if (!mapping.TryGetValue(eventType, out descriptors))
            {
                descriptors = new EventHandlersDescriptor(eventType.Name);
                mapping.Add(typeof(TEvent), descriptors);
            }

            descriptors.EventHandlerDescriptors.Add(new EventHandlerDescriptor <TEvent>(config, eventType, handler));
        }
Ejemplo n.º 2
0
        EventHandlersDescriptor IEventHandlerSelector.SelectHandlers(EventHandlerRequest request)
        {
            EventHandlersDescriptor eventDescriptor = null;

            this.traceWriter.TraceBeginEnd(
                request,
                TraceCategories.HandlersCategory,
                TraceLevel.Info,
                this.innerSelector.GetType().Name,
                SelectActionMethodName,
                beginTrace: null,
                execute: () => eventDescriptor = this.innerSelector.SelectHandlers(request),
                endTrace: tr =>
            {
                tr.Message = Error.Format(
                    Resources.TraceHandlerSelectedMessage,
                    FormattingUtilities.EventHandlerDescriptorsToString(eventDescriptor.EventHandlerDescriptors));
            },
                errorTrace: null);

            Collection <EventHandlerDescriptor> handlerDescriptors = new Collection <EventHandlerDescriptor>();

            foreach (var handlerDescriptor in eventDescriptor.EventHandlerDescriptors)
            {
                // Intercept returned EventHandlerDescriptor with a tracing version
                if (handlerDescriptor != null && !(handlerDescriptor is EventHandlerDescriptorTracer))
                {
                    handlerDescriptors.Add(new EventHandlerDescriptorTracer(handlerDescriptor, this.traceWriter));
                }
                else
                {
                    handlerDescriptors.Add(handlerDescriptor);
                }
            }

            return(new EventHandlersDescriptor(eventDescriptor.EventName, handlerDescriptors));
        }