Skip to content

Commit 32a8e37

Browse files
committed
3
1 parent b50f19b commit 32a8e37

File tree

14 files changed

+701
-606
lines changed

14 files changed

+701
-606
lines changed

sandbox/MultiContainedApp/Program.cs

Lines changed: 51 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,19 +10,31 @@ class Program
1010
{
1111
static async Task Main(string[] args)
1212
{
13+
// args = new string[] { "Bar.Hello3", "2" };
14+
//args = new string[] { "bar", "hello3", "-help" };
15+
args = new string[] { "foo.eo", "-msg", "e" };
16+
//args = new string[] { "bar.hello2", "help" };
17+
1318
await Host.CreateDefaultBuilder()
14-
.RunConsoleAppFrameworkAsync(args);
19+
.ConfigureLogging(x => x.SetMinimumLevel(LogLevel.Trace))
20+
.RunConsoleAppFrameworkAsync(args, options: new ConsoleAppFrameworkOptions
21+
{
22+
GlobalFilters = new IConsoleAppFrameworkFilter[] { new MyFilter2 { Order = -1 }, new MyFilter() }
23+
});
1524
}
1625
}
1726

1827
public class Foo : ConsoleAppBase
1928
{
20-
[Command("Echo", "Echo message to the logger")]
29+
[Command(new[] { "eo", "t" }, "Echo message to the logger")]
30+
[ConsoleAppFrameworkFilter(typeof(EchoFilter), Order = 10)]
2131
public void Echo([Option("msg", "Message to send.")]string msg)
2232
{
33+
2334
this.Context.Logger.LogInformation(msg);
2435
}
2536

37+
[Command("s")]
2638
public void Sum([Option(0)]int x, [Option(1)]int y)
2739
{
2840
this.Context.Logger.LogInformation((x + y).ToString());
@@ -35,5 +47,42 @@ public void Hello2()
3547
{
3648
this.Context.Logger.LogInformation("H E L L O");
3749
}
50+
51+
public void Hello3([Option(0)]int aaa)
52+
{
53+
this.Context.Logger.LogInformation("H E L L O:" + aaa);
54+
}
55+
}
56+
57+
public class MyFilter : IConsoleAppFrameworkFilter
58+
{
59+
public int Order { get; set; } // order will set from attribute.
60+
61+
public async ValueTask Invoke(ConsoleAppContext context, Func<ConsoleAppContext, ValueTask> next)
62+
{
63+
Console.WriteLine("call second");
64+
await next(context);
65+
}
66+
}
67+
68+
public class MyFilter2 : IConsoleAppFrameworkFilter
69+
{
70+
public int Order { get; set; } // order will set from attribute.
71+
72+
public async ValueTask Invoke(ConsoleAppContext context, Func<ConsoleAppContext, ValueTask> next)
73+
{
74+
Console.WriteLine("call first");
75+
await next(context);
76+
}
77+
}
78+
79+
public class EchoFilter : IConsoleAppFrameworkFilter
80+
{
81+
public int Order { get; set; }
82+
83+
public async ValueTask Invoke(ConsoleAppContext context, Func<ConsoleAppContext, ValueTask> next)
84+
{
85+
await next(context);
86+
}
3887
}
3988
}

sandbox/SingleContainedApp/Program.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ public async Task Throw()
160160

161161
public class SimpleTwoArgs : ConsoleAppBase
162162
{
163-
public async ValueTask<int> Hello(string name, int repeat)
163+
public async ValueTask<int> Hello([Option("n")]string name, [Option("r")]int repeat)
164164
{
165165
Context.Logger.LogInformation($"name:{name}");
166166

@@ -179,15 +179,17 @@ static async Task Main(string[] args)
179179
{
180180
//args = new[] { "-array", "10,20,30", "-person", @"{""Age"":10,""Name"":""foo""}" };
181181

182-
args = new[] { "-name", "aaa", "-repeat", "3" };
182+
//args = new[] { "--name", "aaa", "--repeat", "3" };
183183

184+
//args = new[] { "--help" };
185+
args = new[] { "encode", "--help" };
184186

185187
await Host.CreateDefaultBuilder()
186188
.ConfigureLogging(logging =>
187189
{
188190
logging.SetMinimumLevel(LogLevel.Trace).ReplaceToSimpleConsole();
189191
})
190-
.RunConsoleAppFrameworkAsync<SimpleTwoArgs>(args);
192+
.RunConsoleAppFrameworkAsync<OverrideCheck>(args);
191193
// .RunConsoleAppEngineAsync
192194
//.ConfigureServices((hostContext, services) =>
193195
//{

src/ConsoleAppFramework.WebHosting/ConsoleAppFrameworkHostingExtensions.cs

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,15 @@ namespace ConsoleAppFramework // .WebHosting
1515
{
1616
public static class ConsoleAppFrameworkHostingExtensions
1717
{
18-
public static IWebHostBuilder PrepareConsoleAppFrameworkMiddleware(this IWebHostBuilder builder, IConsoleAppInterceptor? interceptor = null)
18+
public static IWebHostBuilder PrepareConsoleAppFrameworkMiddleware(this IWebHostBuilder builder, ConsoleAppFrameworkOptions? options = null)
1919
{
2020
var consoleAppTypes = CollectConsoleAppTypes();
2121
var target = new TargetConsoleAppTypeCollection(consoleAppTypes);
2222

2323
return builder
2424
.ConfigureServices(services =>
2525
{
26-
services.AddSingleton<IConsoleAppInterceptor>(interceptor ?? NullConsoleAppInterceptor.Default);
26+
services.AddSingleton<ConsoleAppFrameworkOptions>(options ?? new ConsoleAppFrameworkOptions());
2727
services.AddSingleton<TargetConsoleAppTypeCollection>(target);
2828
foreach (var item in target)
2929
{
@@ -32,11 +32,11 @@ public static IWebHostBuilder PrepareConsoleAppFrameworkMiddleware(this IWebHost
3232
});
3333
}
3434

35-
public static async Task RunConsoleAppFrameworkWebHostingAsync(this IHostBuilder builder, string urls, SwaggerOptions? swaggerOptions = null, IConsoleAppInterceptor? interceptor = null)
35+
public static async Task RunConsoleAppFrameworkWebHostingAsync(this IHostBuilder builder, string urls, SwaggerOptions? swaggerOptions = null, ConsoleAppFrameworkOptions? options = null)
3636
{
3737
var host = builder.ConfigureWebHost(webHost =>
3838
{
39-
webHost.PrepareConsoleAppFrameworkMiddleware(interceptor)
39+
webHost.PrepareConsoleAppFrameworkMiddleware(options)
4040
.ConfigureServices(services =>
4141
{
4242
if (swaggerOptions == null)
@@ -71,27 +71,27 @@ public class DefaultStartup
7171
{
7272
public void Configure(IApplicationBuilder app, IHostApplicationLifetime lifetime)
7373
{
74-
var interceptor = app.ApplicationServices.GetService<IConsoleAppInterceptor>();
74+
// var interceptor = app.ApplicationServices.GetService<IConsoleAppInterceptor>();
7575
var provider = app.ApplicationServices.GetService<IServiceProvider>();
7676
var logger = app.ApplicationServices.GetService<ILogger<ConsoleAppEngine>>();
7777

78-
lifetime.ApplicationStarted.Register(async () =>
79-
{
80-
try
81-
{
82-
await interceptor.OnEngineBeginAsync(provider, logger);
83-
}
84-
catch { }
85-
});
78+
//lifetime.ApplicationStarted.Register(async () =>
79+
//{
80+
// try
81+
// {
82+
// // await interceptor.OnEngineBeginAsync(provider, logger);
83+
// }
84+
// catch { }
85+
//});
8686

87-
lifetime.ApplicationStopped.Register(async () =>
88-
{
89-
try
90-
{
91-
await interceptor.OnEngineCompleteAsync(provider, logger);
92-
}
93-
catch { }
94-
});
87+
//lifetime.ApplicationStopped.Register(async () =>
88+
//{
89+
// try
90+
// {
91+
// // await interceptor.OnEngineCompleteAsync(provider, logger);
92+
// }
93+
// catch { }
94+
//});
9595

9696
var swaggerOption = app.ApplicationServices.GetService<SwaggerOptions>() ?? new SwaggerOptions("ConsoleAppFramework", "", "/");
9797
app.UseConsoleAppFrameworkSwaggerMiddleware(swaggerOption);

src/ConsoleAppFramework.WebHosting/ConsoleAppFrameworkMiddleware.cs

Lines changed: 42 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using Microsoft.AspNetCore.Http;
22
using Microsoft.Extensions.Logging;
3+
using Microsoft.Extensions.Options;
34
using System;
45
using System.Collections.Generic;
56
using System.Net;
@@ -9,42 +10,43 @@
910

1011
namespace ConsoleAppFramework.WebHosting
1112
{
12-
internal class WebHostingInterceptor : IConsoleAppInterceptor
13-
{
14-
readonly IConsoleAppInterceptor innerInterceptor;
15-
16-
public bool CompleteSuccessfully { get; private set; }
17-
public string? ErrorMessage { get; private set; }
18-
public Exception? Exception { get; private set; }
19-
20-
public WebHostingInterceptor(IConsoleAppInterceptor innerInterceptor)
21-
{
22-
this.innerInterceptor = innerInterceptor;
23-
}
24-
25-
public ValueTask OnEngineBeginAsync(IServiceProvider serviceProvider, ILogger<ConsoleAppEngine> logger)
26-
{
27-
return innerInterceptor.OnEngineBeginAsync(serviceProvider, logger);
28-
}
29-
30-
public ValueTask OnMethodEndAsync(ConsoleAppContext context, string? errorMessageIfFailed, Exception? exceptionIfExists)
31-
{
32-
this.CompleteSuccessfully = (errorMessageIfFailed == null && exceptionIfExists == null);
33-
this.ErrorMessage = errorMessageIfFailed;
34-
this.Exception = exceptionIfExists;
35-
return innerInterceptor.OnMethodEndAsync(context, errorMessageIfFailed, exceptionIfExists);
36-
}
37-
38-
public ValueTask OnMethodBeginAsync(ConsoleAppContext context)
39-
{
40-
return innerInterceptor.OnMethodBeginAsync(context);
41-
}
42-
43-
public ValueTask OnEngineCompleteAsync(IServiceProvider serviceProvider, ILogger<ConsoleAppEngine> logger)
44-
{
45-
return innerInterceptor.OnEngineCompleteAsync(serviceProvider, logger);
46-
}
47-
}
13+
// TODO: Add Interceptor.
14+
//internal class WebHostingInterceptor : IConsoleAppInterceptor
15+
//{
16+
// readonly IConsoleAppInterceptor innerInterceptor;
17+
18+
// public bool CompleteSuccessfully { get; private set; }
19+
// public string? ErrorMessage { get; private set; }
20+
// public Exception? Exception { get; private set; }
21+
22+
// public WebHostingInterceptor(IConsoleAppInterceptor innerInterceptor)
23+
// {
24+
// this.innerInterceptor = innerInterceptor;
25+
// }
26+
27+
// public ValueTask OnEngineBeginAsync(IServiceProvider serviceProvider, ILogger<ConsoleAppEngine> logger)
28+
// {
29+
// return innerInterceptor.OnEngineBeginAsync(serviceProvider, logger);
30+
// }
31+
32+
// public ValueTask OnMethodEndAsync(ConsoleAppContext context, string? errorMessageIfFailed, Exception? exceptionIfExists)
33+
// {
34+
// this.CompleteSuccessfully = (errorMessageIfFailed == null && exceptionIfExists == null);
35+
// this.ErrorMessage = errorMessageIfFailed;
36+
// this.Exception = exceptionIfExists;
37+
// return innerInterceptor.OnMethodEndAsync(context, errorMessageIfFailed, exceptionIfExists);
38+
// }
39+
40+
// public ValueTask OnMethodBeginAsync(ConsoleAppContext context)
41+
// {
42+
// return innerInterceptor.OnMethodBeginAsync(context);
43+
// }
44+
45+
// public ValueTask OnEngineCompleteAsync(IServiceProvider serviceProvider, ILogger<ConsoleAppEngine> logger)
46+
// {
47+
// return innerInterceptor.OnEngineCompleteAsync(serviceProvider, logger);
48+
// }
49+
//}
4850

4951
internal class LogCollector : ILogger<ConsoleAppEngine>
5052
{
@@ -93,15 +95,17 @@ public class ConsoleAppFrameworkMiddleware
9395
readonly IServiceProvider provider;
9496
readonly ILogger<ConsoleAppEngine> logger;
9597
readonly IConsoleAppInterceptor interceptor;
98+
readonly ConsoleAppFrameworkOptions options;
9699

97100
readonly Dictionary<string, MethodInfo> methodLookup;
98101

99-
public ConsoleAppFrameworkMiddleware(RequestDelegate next, ILogger<ConsoleAppEngine> logger, IConsoleAppInterceptor interceptor, IServiceProvider provider, TargetConsoleAppTypeCollection targetTypes)
102+
public ConsoleAppFrameworkMiddleware(RequestDelegate next, ILogger<ConsoleAppEngine> logger, IConsoleAppInterceptor interceptor, IServiceProvider provider, TargetConsoleAppTypeCollection targetTypes, IOptionsSnapshot<ConsoleAppFrameworkOptions> options)
100103
{
101104
this.next = next;
102105
this.logger = logger;
103106
this.interceptor = interceptor;
104107
this.provider = provider;
108+
this.options = options.Value;
105109
this.methodLookup = BuildMethodLookup(targetTypes);
106110
}
107111

@@ -152,7 +156,7 @@ public async Task Invoke(HttpContext httpContext)
152156
var hostingInterceptor = new WebHostingInterceptor(interceptor);
153157
var collectLogger = new LogCollector(logger);
154158

155-
var engine = new ConsoleAppEngine(collectLogger, provider, hostingInterceptor, httpContext.RequestAborted);
159+
var engine = new ConsoleAppEngine(collectLogger, provider, options, httpContext.RequestAborted);
156160
await engine.RunAsync(methodInfo.DeclaringType, methodInfo, args);
157161

158162
// out result

0 commit comments

Comments
 (0)