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))()); }
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))); }
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))(); }
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))()); }
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)); }
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)); }
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)); }
public DefaultMediator( MediationServiceProvider services) { Services = services ?? throw new ArgumentNullException(nameof(services)); }
public static T GetService <T>(this MediationServiceProvider serviceProvider) => (T)serviceProvider(typeof(T));
public static IEnumerable <T> GetServices <T>(this MediationServiceProvider serviceProvider) => (IEnumerable <T>)serviceProvider(typeof(IEnumerable <T>));