public Response <TResponseData> Send <TResponseData>(ICommand <TResponseData> command) { var response = new Response <TResponseData>(); var postProcessors = _container.GetAllInstances <ICommandPostHandleInspector>(); try { var plan = new MediatorPlan <TResponseData>(typeof(ICommandHandler <,>), "Handle", command.GetType(), _container); response.Data = plan.Invoke(command); } catch (Exception e) { response.Exception = e; } foreach (var commandPostHandleInspector in postProcessors) { if (commandPostHandleInspector.InterestedIn(command)) { commandPostHandleInspector.Inspect(command); } } return(response); }
public async Task <Response <TResponseData> > RequestAsync <TResponseData>(IAsyncRequest <TResponseData> query) { Response <TResponseData> response = new Response <TResponseData>(); try { var plan = new MediatorPlan <TResponseData>(typeof(IAsyncRequestHandler <,>), "HandleAsync", query.GetType(), _dependencyResolver); var interceptors = GetRequestInterceptors(plan); foreach (var requestInterceptor in interceptors) { await requestInterceptor.BeforeInvokeAsync(plan.HandleMethod, query, query.GetType()); } response.Data = await plan.InvokeAsync((object)query); foreach (var requestInterceptor in interceptors) { await requestInterceptor.AfterInvokeAsync(plan.HandleMethod, query, query.GetType(), response.Data); } } catch (Exception ex) { response.Exception = ex; } return(response); }
public virtual Response <TResponseData> Request <TResponseData>(IRequest <TResponseData> request) { Response <TResponseData> response = new Response <TResponseData>(); try { var plan = new MediatorPlan <TResponseData>(typeof(IRequestHandler <,>), "Handle", request.GetType(), _dependencyResolver); List <RequestInterceptor> requestInterceptors = GetRequestInterceptors(plan); foreach (RequestInterceptor requestInterceptor in requestInterceptors) { requestInterceptor.BeforeInvoke(plan.HandleMethod, request, request.GetType()); } response.Data = plan.Invoke(request); foreach (RequestInterceptor requestInterceptor in requestInterceptors) { requestInterceptor.AfterInvoke(plan.HandleMethod, request, request.GetType(), response.Data); } } catch (Exception ex) { response.Exception = ex; } return(response); }
public virtual Response <TResponseData> Request <TResponseData>(IQuery <TResponseData> query) { var response = new Response <TResponseData>(); try { var plan = new MediatorPlan <TResponseData>(typeof(IQueryHandler <,>), "Handle", query.GetType(), _container); response.Data = plan.Invoke(query); } catch (Exception e) { response.Exception = e; } return(response); }
public async Task <Response <TResponseData> > RequestAsync <TResponseData>(IAsyncRequest <TResponseData> query) { var response = new Response <TResponseData>(); try { var plan = new MediatorPlan <TResponseData>(typeof(IAsyncRequestHandler <,>), "HandleAsync", query.GetType(), _dependencyResolver); response.Data = await plan.InvokeAsync(query); } catch (Exception e) { response.Exception = e; } return(response); }
public virtual Response <TResponseData> Request <TResponseData>(IRequest <TResponseData> request) { var response = new Response <TResponseData>(); try { var plan = new MediatorPlan <TResponseData>(typeof(IRequestHandler <,>), "Handle", request.GetType(), _dependencyResolver); response.Data = plan.Invoke(request); } catch (Exception e) { response.Exception = e; } return(response); }
private List <RequestInterceptor> GetRequestInterceptors <TResponseData>(MediatorPlan <TResponseData> plan) { MethodInfo method = plan.HandlerInstance.GetType().GetTypeInfo().GetMethod(plan.HandleMethod.Name, ((IEnumerable <ParameterInfo>)plan.HandleMethod.GetParameters()).Select(info => info.ParameterType).ToArray()); List <RequestInterceptor> requestInterceptorList = new List <RequestInterceptor>(); foreach (Attribute customAttribute in method.GetCustomAttributes()) { if (customAttribute is RequestInterceptAttribute) { foreach (Type interceptor in ((RequestInterceptAttribute)customAttribute).GetInterceptors()) { RequestInterceptor instance = (RequestInterceptor)_dependencyResolver.GetInstance(interceptor); instance.RequestInterceptAttribute = (RequestInterceptAttribute)customAttribute; requestInterceptorList.Add(instance); } } } return(requestInterceptorList); }
private List <RequestInterceptor> GetRequestInterceptors <TResponseData>(MediatorPlan <TResponseData> plan) { var implementationMethod = plan.HandlerInstance.GetType() .GetMethod(plan.HandleMethod.Name, plan.HandleMethod.GetParameters().Select(info => info.ParameterType).ToArray()); var interceptors = new List <RequestInterceptor>(); foreach (var attribute in implementationMethod.GetCustomAttributes()) { if (!(attribute is RequestInterceptAttribute)) { continue; } foreach (var interceptor in ((RequestInterceptAttribute)attribute).GetInterceptors()) { var requestInterceptor = (RequestInterceptor)_dependencyResolver.GetInstance(interceptor); requestInterceptor.RequestInterceptAttribute = (RequestInterceptAttribute)attribute; interceptors.Add(requestInterceptor); } } return(interceptors); }
public Task <TResponseData> RequestAsync <TResponseData>(IAsyncRequest <TResponseData> query) { var plan = new MediatorPlan <TResponseData>(typeof(IAsyncRequestHandler <,>), "HandleAsync", query.GetType(), _container); return(plan.InvokeAsync(query)); }
public async Task <TResponse> SendAsync <TResponse>(ICommand <TResponse> query) { var plan = new MediatorPlan <TResponse>(typeof(ICommandHandler <,>), "SendAsync", query.GetType(), _componentContext); return(await plan.InvokeAsync(query)); }