public async Task RunLoop() { SetupActions(); while (true) { Console.WriteLine(); ConsoleHelpers.ConsoleInLine(Prompt, ConsoleColor.DarkYellow); var queryString = Console.ReadLine(); if (queryString == "q") { break; } var queryCommand = queryString.Split(' ').FirstOrDefault(); var queryParam = queryString.Replace($"{queryCommand} ", "").Trim(); if (_actions.ContainsKey(queryCommand)) { try { await _actions[queryCommand].ExecuteAction(queryParam); } catch (Exception e) { ConsoleHelpers.ConsoleInLine($"Error:", ConsoleColor.DarkRed); ConsoleHelpers.ConsoleLine(e.Message); } } else { ConsoleHelpers.ConsoleLine($"{Prompt} Unrecognized command '{queryCommand}'. Use ? or help for a list of available commands", ConsoleColor.DarkRed); } } }
public void SetupActions() { var allMethods = _executionContext.GetType().GetMethods(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance); _actionsList = allMethods.Where(m => m.GetCustomAttribute <ConsoleActionTriggerAttribute>() != null).Select(m => new ConsoleAction(m, _executionContext)).ToList(); _actionsList.Insert(0, new ConsoleAction(Help, "Displays this message", 0, "h", "help", "?")); _actions = _actionsList.SelectMany(ca => ca.Commands.Select(c => new KeyValuePair <string, ConsoleAction>(c, ca))) .ToDictionary(k => k.Key, v => v.Value); ConsoleHelpers.ConsoleLine("Type '?' or 'help' for additional commands...", ConsoleColor.DarkGray); }