private static RequestHandler <TResponse> CreateRequestHandler <TResponse>(IAmARequest <TResponse> request) { var handlerType = typeof(RequestHandlerImpl <,>) .MakeGenericType(request.GetType(), typeof(TResponse)); return((RequestHandler <TResponse>)Activator.CreateInstance(handlerType)); }
public abstract Task <TResponse> Handle(IAmARequest <TResponse> request, IServiceFactory factory);
/// <inheritdoc cref="IMediate" /> public async Task <TResponse> Request <TResponse>(IAmARequest <TResponse> request) { var handler = CreateRequestHandler(request); return(await handler.Handle(request, _factory).ConfigureAwait(false)); }
/// <summary> /// Make the request to the actual <see cref="IHandleRequests{TRequest, TResponse}"/> /// implementation. /// </summary> /// <param name="request">The request.</param> /// <param name="factory">The response to that request.</param> /// <returns>The <typeparamref name="TResponse"/> from the <typeparamref name="TRequest"/>.</returns> public override async Task <TResponse> Handle(IAmARequest <TResponse> request, IServiceFactory factory) { return(await Handle((TRequest)request, factory)); }