Exemplo n.º 1
0
        public static Func <Task> GenerateNotificationPipeline <TRequest>(
            this MediationServiceProvider serviceProvider,
            Func <INotificationHandler <TRequest>, Func <Task> > seed,
            Func <Func <Task>, IPipelineStep <TRequest>, Func <Task> > method)
        {
            var handlers = serviceProvider.GetServices <INotificationHandler <TRequest> >();

            return(serviceProvider.GetServices <IPipelineStep <TRequest> >()
                   .Reverse()
                   .Aggregate(
                       () => Task.WhenAll(handlers.Select(x => seed(x)())),
                       method));
        }
Exemplo n.º 2
0
        public static Action GenerateNotificationPipeline <TRequest>(
            this MediationServiceProvider serviceProvider,
            Func <INotificationHandler <TRequest>, Action> seed,
            Func <Action, IPipelineStep <TRequest>, Action> method)
        {
            var handlers = serviceProvider.GetServices <INotificationHandler <TRequest> >();

            return(serviceProvider.GetServices <IPipelineStep <TRequest> >()
                   .Reverse()
                   .Aggregate(
                       () => { foreach (var handler in handlers)
                               {
                                   seed(handler)();
                               }
                       },
                       method));
        }
Exemplo n.º 3
0
        public static Func <THandler> GenerateRequestPipeline <TRequest, TResult, THandler>(
            this MediationServiceProvider serviceProvider,
            Func <IRequestHandler <TRequest, TResult>, Func <THandler> > seed,
            Func <Func <THandler>, IPipelineStep <TRequest, TResult>, Func <THandler> > method)
        {
            var handler = serviceProvider.GetService <IRequestHandler <TRequest, TResult> >();

            return(serviceProvider.GetServices <IPipelineStep <TRequest, TResult> >()
                   .Reverse()
                   .Aggregate(seed(handler), method));
        }