Обычно приходится тратить много времени на парсинг консольных аргументов в консольных приложениях. В интернете я нашел несколько систем, которые упрощают эту задачу, но они мне показались громоздкими, поэтому было решено создать новую систему на основе метаинформации — NConsoler.
Стояла задача превратить некий набор аргументов на входе в вызов определенного метода. Если с аргументами что-то не так, то следует вывести ошибку. Также по метаинформации можно составить простые сообщения помощи.
Итак, чтобы система знала какой метод ей использовать, надо его пометить каким-либо образом. С этим хорошо справляются атрибуты. Я сделал атрибут
Естественно некоторые аргументы могут быть обязательными, а некоторые — нет. Это также надо указать в качестве метаинформации.
так как в метод обязательно следует передать все параметры, то для необязательных надо указать значение по умолчанию
Для начала хватит. Теперь надо запустить метод на выполнение. Сделаем это в методе
в метод
Вот полный листинг приложения:
осталось запустить приложение:
или с инверсией флага:
Естественно, в описание Action-методов может закрасться ошибка. Во многих библиотеках источник ошибки часто не так очевиден, поэтому очень важно вывести адекватное сообщение об ошибке. NConsoler перед запуском Action-метода проверяет мета информацию, а также параметры коммандной строки и выводит подробное сообщение об обшибке с возможной причиной возникновения. Можно сказать это развитие идеи “Design by contract” что позволяет работать с библиотекой не прибегая к справке.
Найти больше информации, скачать библиотеку и её исходный код можно на сайте NConsoler: nconsoler.csharpus.com
Стояла задача превратить некий набор аргументов на входе в вызов определенного метода. Если с аргументами что-то не так, то следует вывести ошибку. Также по метаинформации можно составить простые сообщения помощи.
Итак, чтобы система знала какой метод ей использовать, надо его пометить каким-либо образом. С этим хорошо справляются атрибуты. Я сделал атрибут
Action
:[Action]
public static void Method(...)...
Естественно некоторые аргументы могут быть обязательными, а некоторые — нет. Это также надо указать в качестве метаинформации.
[Action]
public static void Method(
[Required] string name,
[Optional(true)] bool flag)...
так как в метод обязательно следует передать все параметры, то для необязательных надо указать значение по умолчанию
Для начала хватит. Теперь надо запустить метод на выполнение. Сделаем это в методе
Main
:public static void Main(params string[] args) {
Consolery.Run(typeof(Program), args);
}
в метод
Run
надо передать тип, который содержит наш метод помеченный атрибутом Action
, а также аргументы.Вот полный листинг приложения:
using System;
using NConsoler;
public class Program {
public static void Main(params string[] args) {
Consolery.Run(typeof(Program), args);
}
[Action]
public static void Method(
[Required] string name,
[Optional(true)] bool flag) {
Console.WriteLine("name: {0}, flag: {1}", name, flag);
}
}
осталось запустить приложение:
> program.exe «Max»
name: Max, flag: true
или с инверсией флага:
> program.exe «Max» /-flag
name: Max, flag: false
Естественно, в описание Action-методов может закрасться ошибка. Во многих библиотеках источник ошибки часто не так очевиден, поэтому очень важно вывести адекватное сообщение об ошибке. NConsoler перед запуском Action-метода проверяет мета информацию, а также параметры коммандной строки и выводит подробное сообщение об обшибке с возможной причиной возникновения. Можно сказать это развитие идеи “Design by contract” что позволяет работать с библиотекой не прибегая к справке.
Найти больше информации, скачать библиотеку и её исходный код можно на сайте NConsoler: nconsoler.csharpus.com