From a80bce697d65eb89e5b307b3054ec3479e1d9226 Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 30 Dec 2021 15:31:17 +0800 Subject: [PATCH 1/4] Get the configured actions in advance. --- .../Volo/Abp/Options/PreConfigureActionList.cs | 9 ++++++++- .../Volo/Abp/EventBus/Rebus/AbpEventBusRebusModule.cs | 7 +++---- .../Volo/Abp/Hangfire/AbpHangfireModule.cs | 3 ++- .../src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonModule.cs | 5 ++--- .../Versioning/AbpAspNetCoreMvcVersioningTestModule.cs | 6 +++--- 5 files changed, 18 insertions(+), 12 deletions(-) diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Options/PreConfigureActionList.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Options/PreConfigureActionList.cs index 00222d6399..30b96eac2c 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Options/PreConfigureActionList.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/Options/PreConfigureActionList.cs @@ -12,5 +12,12 @@ namespace Volo.Abp.Options action(options); } } + + public TOptions Configure() + { + var options = Activator.CreateInstance(); + Configure(options); + return options; + } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/AbpEventBusRebusModule.cs b/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/AbpEventBusRebusModule.cs index 1ad835c122..806d60bb13 100644 --- a/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/AbpEventBusRebusModule.cs +++ b/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/AbpEventBusRebusModule.cs @@ -11,18 +11,17 @@ namespace Volo.Abp.EventBus.Rebus { public override void ConfigureServices(ServiceConfigurationContext context) { - var options = context.Services.ExecutePreConfiguredActions();; - context.Services.AddTransient(typeof(IHandleMessages<>), typeof(RebusDistributedEventHandlerAdapter<>)); + var preActions = context.Services.GetPreConfigureActions(); Configure(rebusOptions => { - context.Services.ExecutePreConfiguredActions(rebusOptions); + preActions.Configure(rebusOptions); }); context.Services.AddRebus(configure => { - options.Configurer?.Invoke(configure); + preActions.Configure().Configurer?.Invoke(configure); return configure; }); } diff --git a/framework/src/Volo.Abp.HangFire/Volo/Abp/Hangfire/AbpHangfireModule.cs b/framework/src/Volo.Abp.HangFire/Volo/Abp/Hangfire/AbpHangfireModule.cs index 1628d2f37f..3cfe62f13d 100644 --- a/framework/src/Volo.Abp.HangFire/Volo/Abp/Hangfire/AbpHangfireModule.cs +++ b/framework/src/Volo.Abp.HangFire/Volo/Abp/Hangfire/AbpHangfireModule.cs @@ -13,9 +13,10 @@ namespace Volo.Abp.Hangfire public override void ConfigureServices(ServiceConfigurationContext context) { + var preActions = context.Services.GetPreConfigureActions(); context.Services.AddHangfire(configuration => { - context.Services.ExecutePreConfiguredActions(configuration); + preActions.Configure(configuration); }); } diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonModule.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonModule.cs index a4a08ce274..4e92d7e3b5 100644 --- a/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonModule.cs +++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonModule.cs @@ -16,12 +16,11 @@ namespace Volo.Abp.Json context.Services.TryAddEnumerable(ServiceDescriptor .Transient, AbpSystemTextJsonSerializerOptionsSetup>()); + var preActions = context.Services.GetPreConfigureActions(); Configure(options => { options.Providers.Add(); - - var abpJsonOptions = context.Services.ExecutePreConfiguredActions(); - if (abpJsonOptions.UseHybridSerializer) + if (preActions.Configure().UseHybridSerializer) { options.Providers.Add(); } diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Versioning.Tests/Volo/Abp/AspNetCore/Mvc/Versioning/AbpAspNetCoreMvcVersioningTestModule.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Versioning.Tests/Volo/Abp/AspNetCore/Mvc/Versioning/AbpAspNetCoreMvcVersioningTestModule.cs index 4e28d77a0a..8e7ed9bba2 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Versioning.Tests/Volo/Abp/AspNetCore/Mvc/Versioning/AbpAspNetCoreMvcVersioningTestModule.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Versioning.Tests/Volo/Abp/AspNetCore/Mvc/Versioning/AbpAspNetCoreMvcVersioningTestModule.cs @@ -38,9 +38,10 @@ namespace Volo.Abp.AspNetCore.Mvc.Versioning public override void ConfigureServices(ServiceConfigurationContext context) { + var preActions = context.Services.GetPreConfigureActions(); Configure(options => { - context.Services.ExecutePreConfiguredActions(options); + preActions.Configure(options); }); context.Services.AddAbpApiVersioning(options => @@ -51,8 +52,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Versioning //options.ApiVersionReader = new HeaderApiVersionReader("api-version"); //Supports header too //options.ApiVersionReader = new MediaTypeApiVersionReader(); //Supports accept header too - var mvcOptions = context.Services.ExecutePreConfiguredActions(); - options.ConfigureAbp(mvcOptions); + options.ConfigureAbp(preActions.Configure()); }); context.Services.AddHttpClientProxies(typeof(AbpAspNetCoreMvcVersioningTestModule).Assembly); From 9b6d427dc74d30868a5d658179a35a713c4c6da3 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Fri, 31 Dec 2021 10:36:39 +0800 Subject: [PATCH 2/4] Fix the problem of background workers integration --- .../Hangfire/AbpBackgroundWorkersHangfireModule.cs | 2 +- .../Hangfire/HangfireBackgroundWorkerManager.cs | 14 +++++++++++--- .../QuartzPeriodicBackgroundWorkerAdapter.cs | 14 +++++++++++--- 3 files changed, 23 insertions(+), 7 deletions(-) diff --git a/framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo/Abp/BackgroundWorkers/Hangfire/AbpBackgroundWorkersHangfireModule.cs b/framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo/Abp/BackgroundWorkers/Hangfire/AbpBackgroundWorkersHangfireModule.cs index 4efbdcffb7..c454c9f6e6 100644 --- a/framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo/Abp/BackgroundWorkers/Hangfire/AbpBackgroundWorkersHangfireModule.cs +++ b/framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo/Abp/BackgroundWorkers/Hangfire/AbpBackgroundWorkersHangfireModule.cs @@ -10,7 +10,7 @@ namespace Volo.Abp.BackgroundWorkers.Hangfire [DependsOn( typeof(AbpBackgroundWorkersModule), typeof(AbpHangfireModule))] - public class AbpBackgroundWorkerHangfireModule : AbpModule + public class AbpBackgroundWorkersHangfireModule : AbpModule { public override void OnPreApplicationInitialization(ApplicationInitializationContext context) { diff --git a/framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo/Abp/BackgroundWorkers/Hangfire/HangfireBackgroundWorkerManager.cs b/framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo/Abp/BackgroundWorkers/Hangfire/HangfireBackgroundWorkerManager.cs index 272cc3cdcd..2a9cb33a10 100644 --- a/framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo/Abp/BackgroundWorkers/Hangfire/HangfireBackgroundWorkerManager.cs +++ b/framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo/Abp/BackgroundWorkers/Hangfire/HangfireBackgroundWorkerManager.cs @@ -42,9 +42,17 @@ namespace Volo.Abp.BackgroundWorkers.Hangfire if (worker is AsyncPeriodicBackgroundWorkerBase or PeriodicBackgroundWorkerBase) { - var timer = (AbpAsyncTimer) worker.GetType() + var timer = worker.GetType() .GetProperty("Timer", BindingFlags.Instance | BindingFlags.NonPublic)?.GetValue(worker); - period = timer?.Period; + + if (worker is AsyncPeriodicBackgroundWorkerBase) + { + period = ((AbpAsyncTimer)timer)?.Period; + } + else + { + period = ((AbpTimer)timer)?.Period; + } } else { @@ -82,7 +90,7 @@ namespace Volo.Abp.BackgroundWorkers.Hangfire } else { - cron = $"0 0 */{time.TotalDays} * *"; + throw new AbpException($"Cannot convert period: {period} to cron expression, use HangfireBackgroundWorkerBase to define worker"); } return cron; diff --git a/framework/src/Volo.Abp.BackgroundWorkers.Quartz/Volo/Abp/BackgroundWorkers/Quartz/QuartzPeriodicBackgroundWorkerAdapter.cs b/framework/src/Volo.Abp.BackgroundWorkers.Quartz/Volo/Abp/BackgroundWorkers/Quartz/QuartzPeriodicBackgroundWorkerAdapter.cs index aa99434ed5..16286d3153 100644 --- a/framework/src/Volo.Abp.BackgroundWorkers.Quartz/Volo/Abp/BackgroundWorkers/Quartz/QuartzPeriodicBackgroundWorkerAdapter.cs +++ b/framework/src/Volo.Abp.BackgroundWorkers.Quartz/Volo/Abp/BackgroundWorkers/Quartz/QuartzPeriodicBackgroundWorkerAdapter.cs @@ -28,15 +28,23 @@ namespace Volo.Abp.BackgroundWorkers.Quartz int? period; var workerType = worker.GetType(); - if (worker is AsyncPeriodicBackgroundWorkerBase || worker is PeriodicBackgroundWorkerBase) + if (worker is AsyncPeriodicBackgroundWorkerBase or PeriodicBackgroundWorkerBase) { if (typeof(TWorker) != worker.GetType()) { throw new ArgumentException($"{nameof(worker)} type is different from the generic type"); } - var timer = (AbpAsyncTimer) worker.GetType().GetProperty("Timer", BindingFlags.Instance | BindingFlags.NonPublic)?.GetValue(worker); - period = timer?.Period; + var timer = worker.GetType().GetProperty("Timer", BindingFlags.Instance | BindingFlags.NonPublic)?.GetValue(worker); + + if (worker is AsyncPeriodicBackgroundWorkerBase) + { + period = ((AbpAsyncTimer)timer)?.Period; + } + else + { + period = ((AbpTimer)timer)?.Period; + } } else { From 6cd448baa7b3aeb2928fd590e82258c7a1d8e074 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Fri, 31 Dec 2021 11:28:25 +0800 Subject: [PATCH 3/4] Update PreConfigureActionList.cs --- .../Volo/Abp/Options/PreConfigureActionList.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Options/PreConfigureActionList.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Options/PreConfigureActionList.cs index 4792cfc668..bf8bb90f55 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Options/PreConfigureActionList.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/Options/PreConfigureActionList.cs @@ -11,12 +11,12 @@ public class PreConfigureActionList : List> { action(options); } + } - public TOptions Configure() - { - var options = Activator.CreateInstance(); - Configure(options); - return options; - } + public TOptions Configure() + { + var options = Activator.CreateInstance(); + Configure(options); + return options; } } From e914ff859f3e9cbb0f630d376f7d7da27cd34fa6 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Fri, 31 Dec 2021 12:18:28 +0800 Subject: [PATCH 4/4] Update HangfireBackgroundWorkerManager.cs --- .../Hangfire/HangfireBackgroundWorkerManager.cs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo/Abp/BackgroundWorkers/Hangfire/HangfireBackgroundWorkerManager.cs b/framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo/Abp/BackgroundWorkers/Hangfire/HangfireBackgroundWorkerManager.cs index e7c92f1296..33e0ebde4c 100644 --- a/framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo/Abp/BackgroundWorkers/Hangfire/HangfireBackgroundWorkerManager.cs +++ b/framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo/Abp/BackgroundWorkers/Hangfire/HangfireBackgroundWorkerManager.cs @@ -21,7 +21,7 @@ public class HangfireBackgroundWorkerManager : IBackgroundWorkerManager, ISingle return Task.CompletedTask; } - public void Add(IBackgroundWorker worker) + public Task AddAsync(IBackgroundWorker worker) { if (worker is IHangfireBackgroundWorker hangfireBackgroundWorker) { @@ -56,12 +56,12 @@ public class HangfireBackgroundWorkerManager : IBackgroundWorkerManager, ISingle } else { - return; + return Task.CompletedTask; } if (period == null) { - return; + return Task.CompletedTask; } var adapterType = typeof(HangfirePeriodicBackgroundWorkerAdapter<>).MakeGenericType(worker.GetType()); @@ -69,6 +69,8 @@ public class HangfireBackgroundWorkerManager : IBackgroundWorkerManager, ISingle RecurringJob.AddOrUpdate(() => workerAdapter.DoWorkAsync(), GetCron(period.Value)); } + + return Task.CompletedTask; } protected virtual string GetCron(int period)