예제 #1
0
        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));
        }
예제 #2
0
        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
                    });
                }
            }
        }