Пример #1
0
        /// <inheritdoc />
        public void Run(params string[] args)
        {
            _console.WriteLine($"{AppName} {AppVersion}");

            if (args.Length < 1)
            {
                OutputModuleList();
                return;
            }

            var module = _modules.FirstOrDefault(m => InvariantStringMatch(args[0], m.Name));

            if (module == null)
            {
                OutputModuleList();
                return;
            }

            if (args.Length < 2)
            {
                OutputCommandList(module);
                return;
            }

            var command = module.Commands.FirstOrDefault(c => InvariantStringMatch(args[1], c.Name));

            if (command == null)
            {
                OutputCommandList(module);
                return;
            }

            var cmd = _argParser.Parse(args.Skip(2));

            _loggerConfigurationSource.VerbosityLevel = cmd.LogLevel;
            _console.WriteLine($"Using {cmd.LogLevel} log level.");

            if (!cmd.Options.Any() && !cmd.InputFiles.Any())
            {
                OutputParameterList(module, command);
                return;
            }

            _console.WriteLine($"Executing {module.Name} {command.Name}.");
            var task = command.TaskFactory(cmd);

            _appProgressTracker.Add(task);
            try
            {
                task.Run();
            }
            catch (Exception e)
            {
                _appProgressTracker.Fail(task, e);
                throw;
            }
            finally
            {
                _appProgressTracker.Remove(task);
            }
            _console.WriteLine($"Task complete.");
        }