コード例 #1
0
        protected IResponseStatus <TResponse> TryExecute <TResponse>(IRequest <TResponse> request, CommandFacade <TResponse> commandFacade)
            where TResponse : IResponse, new()
        {
            var validateResult = commandFacade.Validate(request);

            if (validateResult.IsValid)
            {
                try
                {
                    var response = commandFacade.Execute(request);
                    return(new OkResponseStatus <TResponse>(response));
                }
                catch (Exception e)
                {
                    //ErrorLogUtils.AddError(e);

                    var error = new InternalServerResponseError();
                    return(new ErrorResponseStatus <TResponse>(error));
                }
            }

            return(new ErrorResponseStatus <TResponse>(validateResult.ResponseError));
        }
コード例 #2
0
        public IResponseStatus <TResponse> Execute <TResponse>(IRequest <TResponse> request)
            where TResponse : IResponse, new()
        {
            var unitOfWork = IoC.Resolve <IUnitOfWork>();

            var stopwatch = new Stopwatch();

            IResponseStatus <TResponse> responseStatus;

            try
            {
                stopwatch.Start();

                var command = CommandFactory.Create(request);

                if (command.RequiresTransaction)
                {
                    unitOfWork.BeginTransaction();
                }

                LimitDbContext(request, _dbContext);
                try
                {
                    responseStatus = TryExecute(request, command);

                    if (responseStatus is OkResponseStatus <TResponse> )
                    {
                        unitOfWork.SaveChanges();

                        if (command.RequiresTransaction)
                        {
                            unitOfWork.CompleteTransaction();
                        }

                        AfterExecute(request, ((OkResponseStatus <TResponse>)responseStatus).Response, command);
                    }
                }
                catch                // (Exception e)
                {
                    if (command.RequiresTransaction)
                    {
                        unitOfWork.RollbackTransaction();
                    }

                    //ErrorLogUtils.AddError(e);

                    var error = new InternalServerResponseError();
                    responseStatus = new ErrorResponseStatus <TResponse>(error);
                }

                unitOfWork.Dispose();

                return(responseStatus);
            }
            catch (Exception e)
            {
                //ErrorLogUtils.AddError(e);
                var error = new InternalServerResponseError(e.Message);
                responseStatus = new ErrorResponseStatus <TResponse>(error);
                return(responseStatus);
            }
            finally
            {
                if (unitOfWork != null && unitOfWork.IsDisposed == false)
                {
                    unitOfWork.Dispose();
                }

                stopwatch.Stop();

                //SaveApiLogEntry(stopwatch.ElapsedMilliseconds, response ?? errResponse, request, authenticateResult.Partner);
            }
        }