gsscoder/commandline

Getting the "current" verb

jeffeld opened this issue · 1 comments

In the code below, I'd like to be able to either:

  • Pass the parsed verb to RunTask or
  • Retrieve the verb in RunTask

Is either one or both possible using 2.1.1-beta?

Thanks,
Jeff

`
static int Main(string[] args)
{

        int exitCode = CommandLine.Parser.Default.ParseArguments<AuditorOpinionScanOptions, TestTaskOptions>(args)
            .MapResult(
                (AuditorOpinionScanOptions options) => RunTask<AuditorOpinionScanTask, AuditorOpinionScanOptions>(options),
                (TestTaskOptions options) => RunTask<TestTask, TestTaskOptions>(options),
                errs => 1
            );

        


        return exitCode;

    }


    private static int RunTask<TTask, TOptions>(TOptions options) where TTask: ITask<TOptions>, new()
    {
        TTask task = new TTask()
        {
            Log = CreateLogger(),
            Options = options
        };

        return task.Execute();
    }

`

So after a little thinking, it dawned on me the verb is an attribute on the options class. A little Googleing turned up this little gem.

Adding the extention method in Darin Dimitrov's answer (dated April 16 2010) allowed me to add this line to RunTask()...

string verb = typeof(TOptions).GetAttributeValue((VerbAttribute verbAttribute) => verbAttribute.Name);
...and use it where required.

Would be interested to know if there is a better way, but if not please go ahead and close this.

Cheers,
Jeff