Пример #1
0
        public override async Task <object> RequestAsync(MediationServiceProvider handlerProvider, object request, CancellationToken cancellationToken)
        {
            var value = (TRequest)request;

            return(await handlerProvider.GenerateRequestPipeline <TRequest, TResult, Task <TResult> >(
                       (handler) => () => handler.HandleAsync(value, cancellationToken),
                       (next, step) => () => step.ExecuteAsync(value, next, cancellationToken))());
        }
Пример #2
0
        public override object Request(MediationServiceProvider handlerProvider, object request)
        {
            var value = (TRequest)request;

            return(handlerProvider.GenerateRequestPipeline <TRequest, TResult, TResult>(
                       (handler) => () => handler.Handle(value),
                       (next, step) => () => step.Execute(value, next)));
        }
Пример #3
0
        public override void Send(
            MediationServiceProvider serviceProvider,
            object message)
        {
            var value = (TMessage)message;

            serviceProvider.GenerateNotificationPipeline <TMessage>(
                (handler) => () => handler.Handle(value),
                (next, step) => () => step.Execute(value, next))();
        }
Пример #4
0
        public override Task SendAsync(
            MediationServiceProvider serviceProvider,
            object message,
            CancellationToken cancellationToken)
        {
            var value = (TMessage)message;

            return(serviceProvider.GenerateNotificationPipeline <TMessage>(
                       (handler) => () => handler.HandleAsync(value, cancellationToken),
                       (next, step) => () => step.ExecuteAsync(value, next, cancellationToken))());
        }
Пример #5
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));
        }
Пример #6
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));
        }
Пример #7
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));
        }
Пример #8
0
 public DefaultMediator(
     MediationServiceProvider services)
 {
     Services = services ?? throw new ArgumentNullException(nameof(services));
 }
Пример #9
0
 public static T GetService <T>(this MediationServiceProvider serviceProvider)
 => (T)serviceProvider(typeof(T));
Пример #10
0
 public static IEnumerable <T> GetServices <T>(this MediationServiceProvider serviceProvider)
 => (IEnumerable <T>)serviceProvider(typeof(IEnumerable <T>));