示例#1
0
        /// <summary>
        /// The Send.
        /// </summary>
        /// <typeparam name="TCommand">.</typeparam>
        /// <typeparam name="TCommandResult">.</typeparam>
        /// <param name="command">.</param>
        /// <returns>.</returns>
        public SimpleResponse <TCommandResult> Send <TCommand, TCommandResult>
            (TCommand command)
            where TCommand : class, ICommand <TCommandResult>
            where TCommandResult : class, ICommandResult, new()
        {
            var handler =
                CommandHandlerFactory.GetCommandHandler <TCommand, TCommandResult>();

            var valid = handler.Validate(command);

            if (valid.ResponseCode < 0)
            {
                return(new SimpleResponse <TCommandResult>
                {
                    ResponseCode = valid.ResponseCode,
                    ResponseMessage = valid.ResponseMessage,
                    RCode = valid.RCode
                });
            }

            var authorize = handler.Authorize(command);

            if (authorize.ResponseCode < 0)
            {
                return(new SimpleResponse <TCommandResult>
                {
                    ResponseCode = authorize.ResponseCode,
                    ResponseMessage = authorize.ResponseMessage,
                    RCode = authorize.RCode
                });
            }
            // Get Handle method custom attributes for Parameter Validation.
            // (handler.GetType().GetMethod("Handle").GetCustomAttributes(true)?? new object[0])
            // handler.GetType().GetMethod("Handle").GetParameters()
            // command.Validate()

            /*
             * var validationResult = command.Validate();
             *  if (validationResult.HasError)
             *  {
             *      response.Data = new TCommandResult();
             *      response.ResponseCode = -200;
             #if DEBUG
             *      response.ResponseMessage = validationResult.AllDevValidationMessages;
             #else
             *      response.ResponseMessage = validationResult.AllValidationMessages;
             #endif
             *
             *      return response;
             *  }
             */
            var commandResult = handler.Handle(command);

            return(commandResult);
        }