Skip to content

Commit a881195

Browse files
committed
refactor: streamline TickerQ initialization and enhance service access methods
1 parent 4e7db6f commit a881195

6 files changed

Lines changed: 73 additions & 7 deletions

File tree

docs/en/framework/infrastructure/background-jobs/tickerq.md

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,14 +38,13 @@ public override void ConfigureServices(ServiceConfigurationContext context)
3838

3939
### UseAbpTickerQ
4040

41-
You need to call the `UseAbpTickerQ` extension method in the `OnApplicationInitialization` method of your module. The method is an extension on `IHost`, so cast the application builder accordingly:
41+
You need to call the `UseAbpTickerQ` extension method in the `OnApplicationInitialization` method of your module:
4242

4343
```csharp
4444
public override async Task OnApplicationInitializationAsync(ApplicationInitializationContext context)
4545
{
46-
var app = context.GetApplicationBuilder();
4746
// (default: TickerQStartMode.Immediate)
48-
(app as IHost)?.UseAbpTickerQ(startMode: ...);
47+
context.GetHost().UseAbpTickerQ(startMode: ...);
4948
}
5049
```
5150

docs/en/framework/infrastructure/background-workers/tickerq.md

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,14 +36,13 @@ public override void ConfigureServices(ServiceConfigurationContext context)
3636

3737
### UseAbpTickerQ
3838

39-
You need to call the `UseAbpTickerQ` extension method in the `OnApplicationInitialization` method of your module. The method is an extension on `IHost`, so cast the application builder accordingly:
39+
You need to call the `UseAbpTickerQ` extension method in the `OnApplicationInitialization` method of your module:
4040

4141
```csharp
4242
public override async Task OnApplicationInitializationAsync(ApplicationInitializationContext context)
4343
{
44-
var app = context.GetApplicationBuilder();
4544
// (default: TickerQStartMode.Immediate)
46-
(app as IHost)?.UseAbpTickerQ(startMode: ...);
45+
context.GetHost().UseAbpTickerQ(startMode: ...);
4746
}
4847
```
4948

framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/Builder/AbpApplicationBuilderExtensions.cs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,18 @@ public async static Task InitializeApplicationAsync([NotNull] this IApplicationB
3838
Check.NotNull(app, nameof(app));
3939

4040
app.ApplicationServices.GetRequiredService<ObjectAccessor<IApplicationBuilder>>().Value = app;
41+
if (app is WebApplication webApplication)
42+
{
43+
app.ApplicationServices.GetRequiredService<ObjectAccessor<WebApplication>>().Value = webApplication;
44+
}
45+
if (app is IHost host)
46+
{
47+
app.ApplicationServices.GetRequiredService<ObjectAccessor<IHost>>().Value = host;
48+
}
49+
if (app is IEndpointRouteBuilder endpointRouteBuilder)
50+
{
51+
app.ApplicationServices.GetRequiredService<ObjectAccessor<IEndpointRouteBuilder>>().Value = endpointRouteBuilder;
52+
}
4153
var application = app.ApplicationServices.GetRequiredService<IAbpApplicationWithExternalServiceProvider>();
4254
var applicationLifetime = app.ApplicationServices.GetRequiredService<IHostApplicationLifetime>();
4355

@@ -59,6 +71,18 @@ public static void InitializeApplication([NotNull] this IApplicationBuilder app)
5971
Check.NotNull(app, nameof(app));
6072

6173
app.ApplicationServices.GetRequiredService<ObjectAccessor<IApplicationBuilder>>().Value = app;
74+
if (app is WebApplication webApplication)
75+
{
76+
app.ApplicationServices.GetRequiredService<ObjectAccessor<WebApplication>>().Value = webApplication;
77+
}
78+
if (app is IHost host)
79+
{
80+
app.ApplicationServices.GetRequiredService<ObjectAccessor<IHost>>().Value = host;
81+
}
82+
if (app is IEndpointRouteBuilder endpointRouteBuilder)
83+
{
84+
app.ApplicationServices.GetRequiredService<ObjectAccessor<IEndpointRouteBuilder>>().Value = endpointRouteBuilder;
85+
}
6286
var application = app.ApplicationServices.GetRequiredService<IAbpApplicationWithExternalServiceProvider>();
6387
var applicationLifetime = app.ApplicationServices.GetRequiredService<IHostApplicationLifetime>();
6488

framework/src/Volo.Abp.AspNetCore/Volo/Abp/ApplicationInitializationContextExtensions.cs

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
using Microsoft.AspNetCore.Builder;
22
using Microsoft.AspNetCore.Hosting;
3+
using Microsoft.AspNetCore.Routing;
34
using Microsoft.Extensions.Configuration;
45
using Microsoft.Extensions.DependencyInjection;
6+
using Microsoft.Extensions.Hosting;
57
using Microsoft.Extensions.Logging;
68
using Volo.Abp.DependencyInjection;
79

@@ -21,6 +23,42 @@ public static IApplicationBuilder GetApplicationBuilder(this ApplicationInitiali
2123
return context.ServiceProvider.GetRequiredService<IObjectAccessor<IApplicationBuilder>>().Value;
2224
}
2325

26+
public static IHost GetHost(this ApplicationInitializationContext context)
27+
{
28+
var host = context.ServiceProvider.GetRequiredService<IObjectAccessor<IHost>>().Value;
29+
Check.NotNull(host, nameof(host));
30+
return host;
31+
}
32+
33+
public static IHost? GetHostOrNull(this ApplicationInitializationContext context)
34+
{
35+
return context.ServiceProvider.GetRequiredService<IObjectAccessor<IHost>>().Value;
36+
}
37+
38+
public static IEndpointRouteBuilder GetEndpointRouteBuilder(this ApplicationInitializationContext context)
39+
{
40+
var endpointRouteBuilder = context.ServiceProvider.GetRequiredService<IObjectAccessor<IEndpointRouteBuilder>>().Value;
41+
Check.NotNull(endpointRouteBuilder, nameof(endpointRouteBuilder));
42+
return endpointRouteBuilder;
43+
}
44+
45+
public static IEndpointRouteBuilder? GetEndpointRouteBuilderOrNull(this ApplicationInitializationContext context)
46+
{
47+
return context.ServiceProvider.GetRequiredService<IObjectAccessor<IEndpointRouteBuilder>>().Value;
48+
}
49+
50+
public static WebApplication GetWebApplication(this ApplicationInitializationContext context)
51+
{
52+
var webApplication = context.ServiceProvider.GetRequiredService<IObjectAccessor<WebApplication>>().Value;
53+
Check.NotNull(webApplication, nameof(webApplication));
54+
return webApplication;
55+
}
56+
57+
public static WebApplication? GetWebApplicationOrNull(this ApplicationInitializationContext context)
58+
{
59+
return context.ServiceProvider.GetRequiredService<IObjectAccessor<WebApplication>>().Value;
60+
}
61+
2462
public static IWebHostEnvironment GetEnvironment(this ApplicationInitializationContext context)
2563
{
2664
return context.ServiceProvider.GetRequiredService<IWebHostEnvironment>();

framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/AbpAspNetCoreModule.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22
using Microsoft.AspNetCore.Builder;
33
using Microsoft.AspNetCore.Hosting.StaticWebAssets;
44
using Microsoft.AspNetCore.RequestLocalization;
5+
using Microsoft.AspNetCore.Routing;
56
using Microsoft.Extensions.DependencyInjection;
7+
using Microsoft.Extensions.Hosting;
68
using Microsoft.Extensions.FileProviders;
79
using MyCSharp.HttpUserAgentParser.DependencyInjection;
810
using Volo.Abp.AspNetCore.Auditing;
@@ -57,6 +59,9 @@ public override void ConfigureServices(ServiceConfigurationContext context)
5759

5860
AddAspNetServices(context.Services);
5961
context.Services.AddObjectAccessor<IApplicationBuilder>();
62+
context.Services.AddObjectAccessor<WebApplication>();
63+
context.Services.AddObjectAccessor<IHost>();
64+
context.Services.AddObjectAccessor<IEndpointRouteBuilder>();
6065
context.Services.AddAbpDynamicOptions<RequestLocalizationOptions, AbpRequestLocalizationOptionsManager>();
6166

6267
StaticWebAssetsLoader.UseStaticWebAssets(context.Services.GetHostingEnvironment(), context.Services.GetConfiguration());

modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.TickerQ/DemoAppTickerQModule.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,8 @@ public override async Task OnApplicationInitializationAsync(ApplicationInitializ
9494
await backgroundWorkerManager.AddAsync(context.ServiceProvider.GetRequiredService<MyBackgroundWorker>());
9595

9696
var app = context.GetApplicationBuilder();
97-
(app as IHost)?.UseAbpTickerQ();
97+
98+
context.GetHost().UseAbpTickerQ();
9899

99100
var timeTickerManager = context.ServiceProvider.GetRequiredService<ITimeTickerManager<TimeTickerEntity>>();
100101
await timeTickerManager.AddAsync(new TimeTickerEntity

0 commit comments

Comments
 (0)