Библиотека на
http://testapi.codeplex.com/
Выдержка из
http://blogs.msdn.com/ivo_manolov/archive/2008/12/17/9230331.aspx
Третий распространенный подход - формирование строго типизированных команд из параметров командной строки. Это распространено в случаях, когда командная строка выглядит следующим образом:
some-exe COMMAND parameters-to-the-command
В этом случае синтаксический анализ немного более сложен:
- Создайте один класс для каждой поддерживаемой команды, которая наследуется от абстрактного базового класса Command и реализует ожидаемый метод Execute.
Передать ожидаемую команду вместе с аргументами командной строки в CommandLineParser.ParseCommand - метод возвратит строго типизированный экземпляр Command, который может быть Execute () - d.
// ПРИМЕР № 3: // Пример синтаксического анализа следующей командной строки:
// Test.exe run / runId = 10 / подробный
// В этом конкретном случае у нас есть фактическая команда в командной строке («run»), которую мы хотим эффективно десериализовать и выполнить.
public class RunCommand : Command
{
bool? Verbose { get; set; }
int? RunId { get; set; }
public override void Execute()
{
// Implement your "run" execution logic here.
}
}
Command c = new RunCommand();
CommandLineParser.ParseArguments(c, args);
c.Execute();
============================
Я не понимаю, если мы создаем конкретный класс перед синтаксическим анализом аргументов, какой смысл аргумента командной строки "run", который является самым первым. Я думал, что идея заключается в том, чтобы создать экземпляр и выполнить команду / класс на основе параметра командной строки (параметр «run» становится экземпляром класса RunCommand, «walk» становится классом WalkCommand и так далее). Это можно сделать с помощью последней версии? Кроме того, то, что я скачал из codeplex, не работает так, как описано выше, и не принимает самый первый параметр без косой черты. Поэтому, если используется отражение, я должен передать имя команды в качестве обычного параметра, а затем выполнить многоэтапное определение имени класса, создать экземпляр с помощью отражения и только затем анализировать другие аргументы с помощью ParseArguments.