Skip to content

Instantly share code, notes, and snippets.

@danielplawgo
Created September 20, 2018 04:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save danielplawgo/72dccd8539097f5ac95d5e4ed6538b0a to your computer and use it in GitHub Desktop.
Save danielplawgo/72dccd8539097f5ac95d5e4ed6538b0a to your computer and use it in GitHub Desktop.
Obsługa parametrów w aplikacji konsolowej za pomocą CommandLineParser
app.exe param1 param2 param3
app.exe -f result.json -l log.txt
app.exe --file result.json --log log.txt
public interface IVerb
{
void Run();
}
public class Options
{
[Option('f', "file", HelpText = "The result file name.", Required = true)]
public string ResultFile { get; set; }
[Option('s', "serializer", HelpText = "The result file serializer.", Required = false, Default = "json")]
public string Serializer { get; set; }
[Value(0, HelpText = "Input files names.", Required = true)]
public IEnumerable<string> InputFiles { get; set; }
}
class Options {
[Value(0)]
public int IntValue { get; set; }
[Value(1, Min=1, Max=3)]
public IEnumerable<string> StringSeq { get; set; }
[Value(2)]
public double DoubleValue { get; set; }
}
[Verb("pack", HelpText = "Pack input files.")]
public class PackOptions : Options
{
}
[Verb("pack", HelpText = "Pack input files.")]
public class PackOptions : Options, IVerb
{
public void Run()
{
Console.WriteLine($"Parsed {GetType().Name}:");
Console.WriteLine(ToString());
}
}
class Program
{
static void Main(string[] args)
{
// parsing parameters from args
}
}
class Program
{
static void Main(string[] args)
{
var result = Parser.Default.ParseArguments<Options>(args);
result.WithParsed(r => Run(r));
}
private static void Run(Options options)
{
Console.WriteLine($"Parsed {options.GetType().Name}:");
Console.WriteLine(options.ToString());
}
}
class Program
{
static void Main(string[] args)
{
var result = Parser.Default.ParseArguments<PackOptions, TestOptions>(args);
result
.WithParsed<PackOptions>(r => Run(r))
.WithParsed<TestOptions>(r => Run(r));
}
private static void Run(Options options)
{
Console.WriteLine($"Parsed {options.GetType().Name}:");
Console.WriteLine(options.ToString());
}
}
class Program
{
static void Main(string[] args)
{
var iverb = typeof(IVerb);
var verbs = typeof(Program).Assembly.GetTypes().Where(t => iverb.IsAssignableFrom(t));
var result = Parser.Default.ParseArguments(args, verbs.ToArray());
result
.WithParsed<IVerb>(r => r.Run());
}
private static void Run(Options options)
{
Console.WriteLine($"Parsed {options.GetType().Name}:");
Console.WriteLine(options.ToString());
}
}
[Verb("test", HelpText = "Test packing input files.")]
public class TestOptions : Options
{
}
[Verb("test", HelpText = "Test packing input files.")]
public class TestOptions : Options, IVerb
{
public void Run()
{
Console.WriteLine($"Parsed {GetType().Name}:");
Console.WriteLine(ToString());
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment