Browse Source

refactor: streamline TickerQ initialization and enhance service access methods

pull/24916/head
maliming 1 month ago
parent
commit
a881195b3b
No known key found for this signature in database GPG Key ID: A646B9CB645ECEA4
  1. 5
      docs/en/framework/infrastructure/background-jobs/tickerq.md
  2. 5
      docs/en/framework/infrastructure/background-workers/tickerq.md
  3. 24
      framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/Builder/AbpApplicationBuilderExtensions.cs
  4. 38
      framework/src/Volo.Abp.AspNetCore/Volo/Abp/ApplicationInitializationContextExtensions.cs
  5. 5
      framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/AbpAspNetCoreModule.cs
  6. 3
      modules/background-jobs/app/Volo.Abp.BackgroundJobs.DemoApp.TickerQ/DemoAppTickerQModule.cs

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

@ -38,14 +38,13 @@ public override void ConfigureServices(ServiceConfigurationContext context)
### UseAbpTickerQ
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:
You need to call the `UseAbpTickerQ` extension method in the `OnApplicationInitialization` method of your module:
```csharp
public override async Task OnApplicationInitializationAsync(ApplicationInitializationContext context)
{
var app = context.GetApplicationBuilder();
// (default: TickerQStartMode.Immediate)
(app as IHost)?.UseAbpTickerQ(startMode: ...);
context.GetHost().UseAbpTickerQ(startMode: ...);
}
```

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

@ -36,14 +36,13 @@ public override void ConfigureServices(ServiceConfigurationContext context)
### UseAbpTickerQ
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:
You need to call the `UseAbpTickerQ` extension method in the `OnApplicationInitialization` method of your module:
```csharp
public override async Task OnApplicationInitializationAsync(ApplicationInitializationContext context)
{
var app = context.GetApplicationBuilder();
// (default: TickerQStartMode.Immediate)
(app as IHost)?.UseAbpTickerQ(startMode: ...);
context.GetHost().UseAbpTickerQ(startMode: ...);
}
```

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

@ -38,6 +38,18 @@ public static class AbpApplicationBuilderExtensions
Check.NotNull(app, nameof(app));
app.ApplicationServices.GetRequiredService<ObjectAccessor<IApplicationBuilder>>().Value = app;
if (app is WebApplication webApplication)
{
app.ApplicationServices.GetRequiredService<ObjectAccessor<WebApplication>>().Value = webApplication;
}
if (app is IHost host)
{
app.ApplicationServices.GetRequiredService<ObjectAccessor<IHost>>().Value = host;
}
if (app is IEndpointRouteBuilder endpointRouteBuilder)
{
app.ApplicationServices.GetRequiredService<ObjectAccessor<IEndpointRouteBuilder>>().Value = endpointRouteBuilder;
}
var application = app.ApplicationServices.GetRequiredService<IAbpApplicationWithExternalServiceProvider>();
var applicationLifetime = app.ApplicationServices.GetRequiredService<IHostApplicationLifetime>();
@ -59,6 +71,18 @@ public static class AbpApplicationBuilderExtensions
Check.NotNull(app, nameof(app));
app.ApplicationServices.GetRequiredService<ObjectAccessor<IApplicationBuilder>>().Value = app;
if (app is WebApplication webApplication)
{
app.ApplicationServices.GetRequiredService<ObjectAccessor<WebApplication>>().Value = webApplication;
}
if (app is IHost host)
{
app.ApplicationServices.GetRequiredService<ObjectAccessor<IHost>>().Value = host;
}
if (app is IEndpointRouteBuilder endpointRouteBuilder)
{
app.ApplicationServices.GetRequiredService<ObjectAccessor<IEndpointRouteBuilder>>().Value = endpointRouteBuilder;
}
var application = app.ApplicationServices.GetRequiredService<IAbpApplicationWithExternalServiceProvider>();
var applicationLifetime = app.ApplicationServices.GetRequiredService<IHostApplicationLifetime>();

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

@ -1,7 +1,9 @@
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Routing;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Volo.Abp.DependencyInjection;
@ -21,6 +23,42 @@ public static class ApplicationInitializationContextExtensions
return context.ServiceProvider.GetRequiredService<IObjectAccessor<IApplicationBuilder>>().Value;
}
public static IHost GetHost(this ApplicationInitializationContext context)
{
var host = context.ServiceProvider.GetRequiredService<IObjectAccessor<IHost>>().Value;
Check.NotNull(host, nameof(host));
return host;
}
public static IHost? GetHostOrNull(this ApplicationInitializationContext context)
{
return context.ServiceProvider.GetRequiredService<IObjectAccessor<IHost>>().Value;
}
public static IEndpointRouteBuilder GetEndpointRouteBuilder(this ApplicationInitializationContext context)
{
var endpointRouteBuilder = context.ServiceProvider.GetRequiredService<IObjectAccessor<IEndpointRouteBuilder>>().Value;
Check.NotNull(endpointRouteBuilder, nameof(endpointRouteBuilder));
return endpointRouteBuilder;
}
public static IEndpointRouteBuilder? GetEndpointRouteBuilderOrNull(this ApplicationInitializationContext context)
{
return context.ServiceProvider.GetRequiredService<IObjectAccessor<IEndpointRouteBuilder>>().Value;
}
public static WebApplication GetWebApplication(this ApplicationInitializationContext context)
{
var webApplication = context.ServiceProvider.GetRequiredService<IObjectAccessor<WebApplication>>().Value;
Check.NotNull(webApplication, nameof(webApplication));
return webApplication;
}
public static WebApplication? GetWebApplicationOrNull(this ApplicationInitializationContext context)
{
return context.ServiceProvider.GetRequiredService<IObjectAccessor<WebApplication>>().Value;
}
public static IWebHostEnvironment GetEnvironment(this ApplicationInitializationContext context)
{
return context.ServiceProvider.GetRequiredService<IWebHostEnvironment>();

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

@ -2,7 +2,9 @@
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting.StaticWebAssets;
using Microsoft.AspNetCore.RequestLocalization;
using Microsoft.AspNetCore.Routing;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.FileProviders;
using MyCSharp.HttpUserAgentParser.DependencyInjection;
using Volo.Abp.AspNetCore.Auditing;
@ -57,6 +59,9 @@ public class AbpAspNetCoreModule : AbpModule
AddAspNetServices(context.Services);
context.Services.AddObjectAccessor<IApplicationBuilder>();
context.Services.AddObjectAccessor<WebApplication>();
context.Services.AddObjectAccessor<IHost>();
context.Services.AddObjectAccessor<IEndpointRouteBuilder>();
context.Services.AddAbpDynamicOptions<RequestLocalizationOptions, AbpRequestLocalizationOptionsManager>();
StaticWebAssetsLoader.UseStaticWebAssets(context.Services.GetHostingEnvironment(), context.Services.GetConfiguration());

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

@ -94,7 +94,8 @@ public class DemoAppTickerQModule : AbpModule
await backgroundWorkerManager.AddAsync(context.ServiceProvider.GetRequiredService<MyBackgroundWorker>());
var app = context.GetApplicationBuilder();
(app as IHost)?.UseAbpTickerQ();
context.GetHost().UseAbpTickerQ();
var timeTickerManager = context.ServiceProvider.GetRequiredService<ITimeTickerManager<TimeTickerEntity>>();
await timeTickerManager.AddAsync(new TimeTickerEntity

Loading…
Cancel
Save