Pull to refresh

NConsoler — парсинг аргументов консольного приложения

Reading time2 min
Views2K
Обычно приходится тратить много времени на парсинг консольных аргументов в консольных приложениях. В интернете я нашел несколько систем, которые упрощают эту задачу, но они мне показались громоздкими, поэтому было решено создать новую систему на основе метаинформации — NConsoler.

Стояла задача превратить некий набор аргументов на входе в вызов определенного метода. Если с аргументами что-то не так, то следует вывести ошибку. Также по метаинформации можно составить простые сообщения помощи.
Итак, чтобы система знала какой метод ей использовать, надо его пометить каким-либо образом. С этим хорошо справляются атрибуты. Я сделал атрибут 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
Tags:
Hubs:
+6
Comments12

Articles