You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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!
The text was updated successfully, but these errors were encountered:
Hello,
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:
Thanks for any help you can give!
The text was updated successfully, but these errors were encountered: