Skip to content

Commit 61357c2

Browse files
committed
Add CreateFromHostBuilder
1 parent 39dfb8a commit 61357c2

File tree

3 files changed

+36
-21
lines changed

3 files changed

+36
-21
lines changed

ReadMe.md

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -365,7 +365,7 @@ This converting behaviour can configure by `ConsoleAppOptions.NameConverter`.
365365

366366
ConsoleApp / ConsoleAppBuilder
367367
---
368-
`ConsoleApp` is an entrypoint of creating ConsoleAppFramework app. It has three APIs, `Create`, `CreateBuilder` and `Run`.
368+
`ConsoleApp` is an entrypoint of creating ConsoleAppFramework app. It has three APIs, `Create`, `CreateBuilder`, `CreateFromHostBuilder` and `Run`.
369369

370370
```csharp
371371
// Create is shorthand of CraeteBuilder(args).Build();
@@ -387,7 +387,7 @@ ConsoleApp.Run(args, /* lambda expression */);
387387
ConsoleApp.Run<MyCommands>(args);
388388
```
389389

390-
When calling `Create/CreateBuilder`, also configure `ConsoleAppOptions`. Full option details, see [ConsoleAppOptions](#consoleappoptions) section.
390+
When calling `Create/CreateBuilder/CreateFromHostBuilder`, also configure `ConsoleAppOptions`. Full option details, see [ConsoleAppOptions](#consoleappoptions) section.
391391

392392
```csharp
393393
var app = ConsoleApp.Create(args, options =>
@@ -397,6 +397,16 @@ var app = ConsoleApp.Create(args, options =>
397397
});
398398
```
399399

400+
Advanced API of `ConsoleApp`, `CreateFromHostBuilder` creates ConsoleApp from IHostBuilder.
401+
402+
```csharp
403+
// Setup services outside of ConsoleAppFramework.
404+
var hostBuilder = Host.CreateDefaultBuilder()
405+
.ConfigureServices();
406+
407+
var app = ConsoleApp.CreateFromHostBuilder(hostBuilder);
408+
```
409+
400410
`ConsoleAppBuilder` itself is `IHostBuilder` so you can use any configuration methods like `ConfigureServices`, `ConfigureLogging`, etc. If method chain is not returns `ConsoleAppBuilder`(for example, using external lib's extension methods), can not get `ConsoleApp` directly. In that case, use `BuildAsConsoleApp()` instead of `Build()`.
401411

402412
`ConsoleApp` exposes some utility properties.

src/ConsoleAppFramework/ConsoleApp.cs

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,17 +51,32 @@ public static ConsoleApp Create(string[] args, Action<HostBuilderContext, Consol
5151

5252
public static ConsoleAppBuilder CreateBuilder(string[] args)
5353
{
54-
return new ConsoleAppBuilder(args);
54+
return new ConsoleAppBuilder(args, Microsoft.Extensions.Hosting.Host.CreateDefaultBuilder(args));
5555
}
5656

5757
public static ConsoleAppBuilder CreateBuilder(string[] args, Action<ConsoleAppOptions> configureOptions)
5858
{
59-
return new ConsoleAppBuilder(args, configureOptions);
59+
return new ConsoleAppBuilder(args, Microsoft.Extensions.Hosting.Host.CreateDefaultBuilder(args), configureOptions);
6060
}
6161

6262
public static ConsoleAppBuilder CreateBuilder(string[] args, Action<HostBuilderContext, ConsoleAppOptions> configureOptions)
6363
{
64-
return new ConsoleAppBuilder(args, configureOptions);
64+
return new ConsoleAppBuilder(args, Microsoft.Extensions.Hosting.Host.CreateDefaultBuilder(args), configureOptions);
65+
}
66+
67+
public static ConsoleApp CreateFromHostBuilder(IHostBuilder hostBuilder, string[] args)
68+
{
69+
return new ConsoleAppBuilder(args, hostBuilder).Build();
70+
}
71+
72+
public static ConsoleApp CreateFromHostBuilder(IHostBuilder hostBuilder, string[] args, Action<ConsoleAppOptions> configureOptions)
73+
{
74+
return new ConsoleAppBuilder(args, hostBuilder, configureOptions).Build();
75+
}
76+
77+
public static ConsoleApp CreateFromHostBuilder(IHostBuilder hostBuilder, string[] args, Action<HostBuilderContext, ConsoleAppOptions> configureOptions)
78+
{
79+
return new ConsoleAppBuilder(args, hostBuilder, configureOptions).Build();
6580
}
6681

6782
public static void Run(string[] args, Delegate rootCommand)

src/ConsoleAppFramework/ConsoleAppBuilder.cs

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -11,36 +11,26 @@ public class ConsoleAppBuilder : IHostBuilder
1111
{
1212
readonly IHostBuilder builder;
1313

14-
internal ConsoleAppBuilder(string[] args)
15-
: this(args, (_, __) => { })
14+
internal ConsoleAppBuilder(string[] args, IHostBuilder hostBuilder)
15+
: this(args, hostBuilder, (_, __) => { })
1616
{
1717
}
1818

19-
internal ConsoleAppBuilder(string[] args, ConsoleAppOptions consoleAppOptions)
19+
internal ConsoleAppBuilder(string[] args, IHostBuilder hostBuilder, ConsoleAppOptions consoleAppOptions)
2020
{
21-
var hostBuilder = new HostBuilder();
22-
hostBuilder.ConfigureDefaults(args);
2321
this.builder = AddConsoleAppFramework(hostBuilder, args, consoleAppOptions, null);
2422
}
2523

26-
internal ConsoleAppBuilder(string[] args, Action<ConsoleAppOptions> configureOptions)
27-
: this(args, (_, options) => configureOptions(options))
24+
internal ConsoleAppBuilder(string[] args, IHostBuilder hostBuilder, Action<ConsoleAppOptions> configureOptions)
25+
: this(args, hostBuilder, (_, options) => configureOptions(options))
2826
{
2927
}
3028

31-
internal ConsoleAppBuilder(string[] args, Action<HostBuilderContext, ConsoleAppOptions> configureOptions)
29+
internal ConsoleAppBuilder(string[] args, IHostBuilder hostBuilder, Action<HostBuilderContext, ConsoleAppOptions> configureOptions)
3230
{
33-
var hostBuilder = new HostBuilder();
34-
hostBuilder.ConfigureDefaults(args);
3531
this.builder = AddConsoleAppFramework(hostBuilder, args, new ConsoleAppOptions(), configureOptions);
3632
}
3733

38-
// internal use for legacy compatible
39-
internal ConsoleAppBuilder(string[] args, IHostBuilder hostBuilder, ConsoleAppOptions options)
40-
{
41-
this.builder = AddConsoleAppFramework(hostBuilder, args, options, (_, __) => { });
42-
}
43-
4434
IHostBuilder AddConsoleAppFramework(IHostBuilder builder, string[] args, ConsoleAppOptions options, Action<HostBuilderContext, ConsoleAppOptions>? configureOptions)
4535
{
4636
return builder

0 commit comments

Comments
 (0)