/// <summary> /// Selects a <see cref="EventHandlerDescriptor"/> for the given <see cref="HandlerRequest"/>. /// </summary> /// <param name="request">The request.</param> /// <returns>An <see cref="EventHandlerDescriptor"/> instance.</returns> public EventHandlersDescriptor SelectHandlers(EventHandlerRequest request) { if (request == null) { throw Error.ArgumentNull("request"); } EventHandlersDescriptor result; if (!this.handlerInfoCache.Value.TryGetValue(request.MessageType, out result)) { throw Error.InvalidOperation(Resources.DefaultHandlerSelector_HandlerNotFound, request.MessageType.Name); } return result; }
/// <summary> /// Selects a <see cref="EventHandlerDescriptor"/> for the given <see cref="HandlerRequest"/>. /// </summary> /// <param name="request">The request.</param> /// <returns>An <see cref="EventHandlerDescriptor"/> instance.</returns> public EventHandlersDescriptor SelectHandlers(EventHandlerRequest request) { if (request == null) { throw Error.ArgumentNull("request"); } EventHandlersDescriptor result; if (!this.handlerInfoCache.Value.TryGetValue(request.MessageType, out result)) { throw Error.InvalidOperation(Resources.DefaultHandlerSelector_HandlerNotFound, request.MessageType.Name); } return(result); }
/// <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); } }
/// <summary> /// Initializes a new instance of the <see cref="CommandHandlerContext"/> class. /// </summary> /// <param name="request">The handler request.</param> /// <param name="descriptor">The handler descriptor.</param> public EventHandlerContext(EventHandlerRequest request, EventHandlerDescriptor descriptor) : this() { if (request == null) { throw Error.ArgumentNull("request"); } if (request.Configuration == null) { throw Error.Argument("request"); } this.Configuration = request.Configuration; this.Request = request; this.Event = request.Event; this.Descriptor = descriptor; this.User = this.Configuration.Services.GetPrincipalProvider().Principal; }
private static Task InvokeHandlerAsync(EventHandlerDescriptor descriptor, EventHandlerRequest request, CancellationToken cancellationToken) { Contract.Requires(descriptor != null); Contract.Requires(request != null); IEventHandler handler = descriptor.CreateHandler(request); if (handler == null) { throw CreateHandlerNotFoundException(descriptor); } request.RegisterForDispose(handler, true); EventHandlerContext context = new EventHandlerContext(request, descriptor); context.Handler = handler; handler.EventContext = context; EventFilterGrouping filterGrouping = descriptor.GetFilterGrouping(); ServicesContainer servicesContainer = request.Configuration.Services; IEventHandlerResult result = new EventHandlerFilterResult(context, servicesContainer, filterGrouping.EventHandlerFilters); return result.ExecuteAsync(cancellationToken); }
private static Task InvokeHandlerAsync(EventHandlerDescriptor descriptor, EventHandlerRequest request, CancellationToken cancellationToken) { Contract.Requires(descriptor != null); Contract.Requires(request != null); IEventHandler handler = descriptor.CreateHandler(request); if (handler == null) { throw CreateHandlerNotFoundException(descriptor); } request.RegisterForDispose(handler, true); EventHandlerContext context = new EventHandlerContext(request, descriptor); context.Handler = handler; handler.EventContext = context; EventFilterGrouping filterGrouping = descriptor.GetFilterGrouping(); ServicesContainer servicesContainer = request.Configuration.Services; IEventHandlerResult result = new EventHandlerFilterResult(context, servicesContainer, filterGrouping.EventHandlerFilters); return(result.ExecuteAsync(cancellationToken)); }
/// <summary> /// Creates a handler instance for the given <see cref="HandlerRequest"/>. /// </summary> /// <param name="request">The request.</param> /// <returns>The created handler instance.</returns> public virtual IEventHandler CreateHandler(EventHandlerRequest request) { return(this.handlerActivator.Create(request, this)); }