public Task <Result <TResult> > ExecuteAsync <TQuery, TResult>(TQuery query, CancellationToken cancellationToken = default) where TQuery : class, IQuery <TResult> { Assert.IsNotNull(query, nameof(query)); cancellationToken.ThrowIfCancellationRequested(); var handler = _queryHandlerResolver.Resolve <TQuery, TResult>(); return(handler.HandleAsync(query, cancellationToken)); }
public QueryResult <TResult> Handle <TQuery, TResult>( TQuery query, QueryContext context) where TQuery : IQuery <TResult> { if (query == null) { throw new ArgumentNullException(nameof(query)); } if (context == null) { throw new ArgumentNullException(nameof(context)); } Logger.Log(new QueryReceivedLog(query, context)); using (_scopeFactory()) { try { var queryHandler = _queryHandlerResolver.Resolve <TQuery, TResult>(); var output = queryHandler.Handle(query, context); return(new QueryResult <TResult> { Output = output }); } catch (KnownException e) { return(new QueryResult <TResult> { KnownError = e }); } catch (Exception ex) { return(new QueryResult <TResult> { UnknownError = ex }); } } }