I hope you can help me. I am trying to create a command line application, but I am having trouble with the handling of the commands.
I have a command: Barcode. This command has an option: --list. When Barcode is called, I want the command to display the help text. When --list is added, I want it to do something.
However I am running into the issue that I cant call the help from inside the command handler. Is there a way to do this? In my main project I have DI injection set up, but I wouldn't know what I would have to inject to get to the help part of the command.
Here is a simplifyed bit of code showing what I want to do:
using Microsoft.Extensions.Hosting;
using System.CommandLine;
using System.CommandLine.Builder;
using System.CommandLine.Hosting;
using System.CommandLine.Parsing;
using UtTools.Controller.Commands.Barcode;
namespace UtToolsCommandLineTest
{
    internal class Program
    {
        static void Main(string[] args)
        {
            RootCommand root = new RootCommand("Root");
            root.AddCommand(new BarcodeCommand());
            CommandLineBuilder builder = new CommandLineBuilder(root)
                .UseDefaults()
                .UseHost(_ => Host.CreateDefaultBuilder(args).ConfigureAppConfiguration((hostContext, config) =>
                {
                }),
                (builder) =>
                {
                    builder.ConfigureServices(services =>
                    {
                    });
                    builder.UseCommandHandler<BarcodeCommand, BarcodeCommand.BarcodeCommandHandler>();
                });
            builder.Build().InvokeAsync(args);
        }
    }
}
using System.CommandLine;
using System.CommandLine.Help;
using System.CommandLine.Invocation;
namespace UtTools.Controller.Commands.Barcode
{
    internal class BarcodeCommand : Command
    {
        public BarcodeCommand(string name = "Barcode", string description = "The base command for generating ccsg and q13 barcodes.") : base(name, description)
        {
            Option<bool> listOption = new Option<bool>(
                aliases: new string[] { "--list", "-l" },
                description: "List all available barcodes");
            AddOption(listOption);
        }
        public class BarcodeCommandHandler : ICommandHandler
        {
            public bool List { get; set; }
            public BarcodeCommandHandler()
            {
            }
            public int Invoke(InvocationContext context)
            {
                return InvokeAsync(context).GetAwaiter().GetResult();
            }
            public Task<int> InvokeAsync(InvocationContext context)
            {
                if(!List)
                {       
                                        /////////////////////////////////
                                        // Should call the help text //
                                        /////////////////////////////////
                    return Task.FromResult(1);
                }
                               // Do stuff
                return Task.FromResult(0);
            }
        }
    }
}
The end goal is a command like this:
Barcode
├── --List                                                          Show all barcodes available
├──Generate
            ├── --OutputDirectoryPath                  The output directory
            ├── --Name
            ├──All                                                   Generate all barcodes
                    ├── --OutputDirectoryPath          The output directory
Thanks for any help you can give!
I also have an issue open on the github. If I get an awnser I will update here as well!

