Albatross.CommandLine.CodeGen
7.5.6
Prefix Reserved
See the version list below for details.
dotnet add package Albatross.CommandLine.CodeGen --version 7.5.6
NuGet\Install-Package Albatross.CommandLine.CodeGen -Version 7.5.6
<PackageReference Include="Albatross.CommandLine.CodeGen" Version="7.5.6"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets> </PackageReference>
paket add Albatross.CommandLine.CodeGen --version 7.5.6
#r "nuget: Albatross.CommandLine.CodeGen, 7.5.6"
// Install Albatross.CommandLine.CodeGen as a Cake Addin #addin nuget:?package=Albatross.CommandLine.CodeGen&version=7.5.6 // Install Albatross.CommandLine.CodeGen as a Cake Tool #tool nuget:?package=Albatross.CommandLine.CodeGen&version=7.5.6
Albatross.CommandLine.CodeGen
A companion code generator used by the Albatross.CommandLine library.
Features
As a development dependency of Albatross.CommandLine library, codegen will be referenced automatically as a PrivateAssets when the reference for Albatross.CommandLine is added to a project. The code generator looks for options classes those are annotated with the Albatross.CommandLine.VerbAttribute and genenerate the appropriate command classes. In the example below, the class TestOptions
, TestCommandHandler
and the first TestCommand
class are created manually and the second TestCommand
class is generated.
- The command is created as a partial class which allows user to add additional functionalities. To customize a command, create a partial command class of the same name with the interface Albatross.CommandLine.IRequireInitialization.
- Nullable property are declared as optional and vice vesa. However requirement can be overwritten using the Albatross.CommandLine.OptionAttribute as shown in the
Value
property in the example. - Option alias can be created using the Albatross.CommandLine.OptionAttribute. Aliases are prefixed with a single dash ('-') if the dash has not been prefixed already. By default,
[Verb("test", typeof(TestCommandHandler), Description = "A test command")]
public record class TestOptions {
public string Name { get; set; } = string.Empty;
public string? Description { get; set; }
[Option("v", "value", Required = false, Description = "An integer value")]
public int Value { get; set; }
}
// implement your command handler logic here
public class TestCommandHandler : ICommandHandler {
...
}
public partial class TestCommand : IRequireInitialization {
// this method will be call right after object construction
public void Init() {
// customize your command here
...
}
}
public sealed partial class TestCommand : Command {
public TestCommand() : base("test", "A test command") {
this.Option_Name = new Option<string>("--name", null) {
IsRequired = true
};
this.AddOption(Option_Name);
this.Option_Description = new Option<string?>("--description", null);
this.AddOption(Option_Description);
this.Option_Value = new Option<int>("--value", "An integer value");
Option_Value.AddAlias("-v");
this.AddOption(Option_Value);
}
public Option<string> Option_Name { get; }
public Option<string?> Option_Description { get; }
public Option<int> Option_Value { get; }
}
The second part of the code generator will create the service registration and option binding code. The RegisterCommands
method should be invoked by service registration code in the Setup class. AddCommands
method is part of the bootstrap code in program.cs
file. See Albatross.CommandLine for details.
public static class RegistrationExtensions
{
public static IServiceCollection RegisterCommands(this IServiceCollection services) {
services.AddKeyedScoped<ICommandHandler, TestCommandHandler>("test");
services.AddOptions<TestOptions>().BindCommandLine();
return services;
}
public static Setup AddCommands(this Setup setup) {
setup.AddCommand<TestCommand>();
return setup;
}
}
Learn more about Target Frameworks and .NET Standard.
-
.NETStandard 2.0
- No dependencies.
NuGet packages (1)
Showing the top 1 NuGet packages that depend on Albatross.CommandLine.CodeGen:
Package | Downloads |
---|---|
Albatross.CommandLine
An integration library that provdes depedency injection, configuration and logging support for [System.CommandLine](https://learn.microsoft.com/en-us/dotnet/standard/commandline/) library |
GitHub repositories
This package is not used by any popular GitHub repositories.