Esempio n. 1
0
        public async Task PublishEvent <TEvent, TPipeContext>(TEvent @event) where TEvent : IEvent
        {
            if (_serviceProvider.GetServices(typeof(IEventHandler <TEvent>)) is IEnumerable <IEventHandler <TEvent> > handlers)
            {
                var eventHandlers = handlers as IEventHandler <TEvent>[] ?? handlers.ToArray();
                if (eventHandlers.Any())
                {
                    foreach (var handler in eventHandlers)
                    {
                        await handler.Handle(@event);
                    }
                }
            }

            var pipeContext = new EventPipelineContext <TEvent, TPipeContext>(@event);

            var pipelines = _serviceProvider.GetServices(typeof(IEventPipeline <TEvent, TPipeContext>));

            foreach (IEventPipeline <TEvent, TPipeContext> pipeline in pipelines)
            {
                var builder = new EventPipelineBuilder <TEvent, TPipeContext>();
                pipeline.Configure(builder);
                await ExecutePipeline(builder.GetPipes(), pipeContext);
            }
        }
Esempio n. 2
0
 public async Task ExecuteEventPipeline <TEvent>(TEvent @event, Type pipelineType) where TEvent : IEvent
 {
     if (_serviceProvider.GetService(pipelineType) is IEventPipeline <TEvent> pipeline)
     {
         var pipeContext = new EventPipelineContext <TEvent>(@event);
         var builder     = new EventPipelineBuilder <TEvent>();
         pipeline.Configure(builder);
         await ExecutePipeline(builder.GetPipes(), pipeContext);
     }
     else
     {
         throw new InvalidOperationException($"{pipelineType.Name} is not of type {nameof(IEventPipeline<TEvent>)}");
     }
 }