/// <summary> /// Executes a command by its name with specified arguments. /// </summary> /// <param name="correlationId">Unique correlation/transaction id.</param> /// <param name="command">Command name.</param> /// <param name="args">Command arguments.</param> /// <returns>Execution result.</returns> public Task <object> ExecuteAsync(string correlationId, string command, Parameters args) { var cref = FindCommand(command); if (cref == null) { throw new BadRequestException( correlationId, "CMD_NOT_FOUND", "Request command does not exist" ) .WithDetails("command", command); } if (correlationId == null) { correlationId = IdGenerator.NextShort(); } var results = cref.Validate(args); ValidationException.ThrowExceptionIfNeeded(correlationId, results, false); return(cref.ExecuteAsync(correlationId, args)); }