Open
Description
Hi all,
I love this project. We are using it to build dotnet-affected!
I'm not sure if this is a known issue, but I'm migrating to use the Hosting setup and I'm seeing different behavior between declaring the RootCommand with a Handler, and binding a handler through the HostBuilder.
It only happens when using a subcommand. If I remove the subcommad, it works.
For example:
public class PublicApiTests
{
private class SubCommand : Command
{
public SubCommand()
: base("thing")
{
}
}
private class HelloRootCommand : RootCommand
{
public HelloRootCommand()
{
this.AddCommand(new SubCommand());
}
}
private class HelloHandler : ICommandHandler
{
public Task<int> InvokeAsync(InvocationContext context)
{
context.Console.Out.WriteLine("Hello World");
return Task.FromResult(0);
}
}
[Fact]
public void Should_Print_HelloWorld()
{
var console = new TestConsole();
new CommandLineBuilder(new HelloRootCommand() {Handler = new HelloHandler()})
.UseDefaults()
.UseHost(host =>
{
// .. configure DI
})
.Build()
.Invoke("", console);
Assert.Contains("Hello World", console.Out.ToString());
}
// this test fails! It prints the help
[Fact]
public void With_DI_Handler_Should_Print_HelloWorld()
{
var console = new TestConsole();
new CommandLineBuilder(new HelloRootCommand())
.UseHost(host =>
{
// .. configure DI
host.UseCommandHandler<HelloRootCommand, HelloHandler>();
})
.UseDefaults()
.Build()
.Invoke("", console);
Assert.Contains("Hello World", console.Out.ToString());
}
}
EDIT: Changing the order of UseDefaults
does not seem to make any difference.
Metadata
Metadata
Assignees
Labels
No labels