From 12fafaa8bb251056829c70a79f85dcefb111b0cf Mon Sep 17 00:00:00 2001 From: gdlcf88 Date: Wed, 1 Jun 2022 22:10:01 +0800 Subject: [PATCH 1/5] Using the event boxes orderly Resolve #12851 --- .../Volo/Abp/EventBus/Distributed/DistributedEventBusBase.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/DistributedEventBusBase.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/DistributedEventBusBase.cs index 69ae91505d..5da66e03cd 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/DistributedEventBusBase.cs +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/DistributedEventBusBase.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Linq; using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; @@ -102,7 +103,7 @@ public abstract class DistributedEventBusBase : EventBusBase, IDistributedEventB return false; } - foreach (var outboxConfig in AbpDistributedEventBusOptions.Outboxes.Values) + foreach (var outboxConfig in AbpDistributedEventBusOptions.Outboxes.Values.OrderBy(x => x.Selector is null)) { if (outboxConfig.Selector == null || outboxConfig.Selector(eventType)) { @@ -137,7 +138,7 @@ public abstract class DistributedEventBusBase : EventBusBase, IDistributedEventB using (var scope = ServiceScopeFactory.CreateScope()) { - foreach (var inboxConfig in AbpDistributedEventBusOptions.Inboxes.Values) + foreach (var inboxConfig in AbpDistributedEventBusOptions.Inboxes.Values.OrderBy(x => x.EventSelector is null)) { if (inboxConfig.EventSelector == null || inboxConfig.EventSelector(eventType)) { From 5877bf92e76771cec396259540f702677fad5d04 Mon Sep 17 00:00:00 2001 From: maliming Date: Wed, 8 Jun 2022 15:24:41 +0800 Subject: [PATCH 2/5] Remove `IAsyncInitialize` interface. Resolve #12913 --- .../Web/AbpAspNetCoreComponentsWebModule.cs | 15 +++++++- .../Web/Security/AbpComponentsClaimsCache.cs | 5 ++- .../AbpWebAssemblyHostBuilderExtensions.cs | 32 ----------------- ...bpAspNetCoreComponentsWebAssemblyModule.cs | 36 ++++++++++++++++++- ...blyCachedApplicationConfigurationClient.cs | 5 ++- .../ICachedApplicationConfigurationClient.cs | 2 +- .../Client/AbpAspNetCoreMvcClientModule.cs | 14 +++++++- ...MvcCachedApplicationConfigurationClient.cs | 5 ++- .../Volo/Abp/IAsyncInitialize.cs | 12 ------- 9 files changed, 69 insertions(+), 57 deletions(-) delete mode 100644 framework/src/Volo.Abp.Core/Volo/Abp/IAsyncInitialize.cs diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web/Volo/Abp/AspNetCore/Components/Web/AbpAspNetCoreComponentsWebModule.cs b/framework/src/Volo.Abp.AspNetCore.Components.Web/Volo/Abp/AspNetCore/Components/Web/AbpAspNetCoreComponentsWebModule.cs index 28984ce5d0..50248d42ab 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.Web/Volo/Abp/AspNetCore/Components/Web/AbpAspNetCoreComponentsWebModule.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web/Volo/Abp/AspNetCore/Components/Web/AbpAspNetCoreComponentsWebModule.cs @@ -1,8 +1,11 @@ -using Microsoft.AspNetCore.Components; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Components; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; using Volo.Abp.AspNetCore.Components.DependencyInjection; +using Volo.Abp.AspNetCore.Components.Web.Security; using Volo.Abp.Modularity; +using Volo.Abp.Threading; using Volo.Abp.UI; namespace Volo.Abp.AspNetCore.Components.Web; @@ -22,4 +25,14 @@ public class AbpAspNetCoreComponentsWebModule : AbpModule { context.Services.Replace(ServiceDescriptor.Transient()); } + + public override void OnApplicationInitialization(ApplicationInitializationContext context) + { + AsyncHelper.RunSync(() => OnApplicationInitializationAsync(context)); + } + + public async override Task OnApplicationInitializationAsync(ApplicationInitializationContext context) + { + await context.ServiceProvider.GetRequiredService().InitializeAsync(); + } } diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web/Volo/Abp/AspNetCore/Components/Web/Security/AbpComponentsClaimsCache.cs b/framework/src/Volo.Abp.AspNetCore.Components.Web/Volo/Abp/AspNetCore/Components/Web/Security/AbpComponentsClaimsCache.cs index bb053eac21..318aada4c5 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.Web/Volo/Abp/AspNetCore/Components/Web/Security/AbpComponentsClaimsCache.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web/Volo/Abp/AspNetCore/Components/Web/Security/AbpComponentsClaimsCache.cs @@ -8,10 +8,9 @@ using Volo.Abp.DependencyInjection; namespace Volo.Abp.AspNetCore.Components.Web.Security; [ExposeServices( - typeof(AbpComponentsClaimsCache), - typeof(IAsyncInitialize) + typeof(AbpComponentsClaimsCache) )] -public class AbpComponentsClaimsCache : IScopedDependency, IAsyncInitialize +public class AbpComponentsClaimsCache : IScopedDependency { public ClaimsPrincipal Principal { get; private set; } diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Microsoft/AspNetCore/Components/WebAssembly/Hosting/AbpWebAssemblyHostBuilderExtensions.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Microsoft/AspNetCore/Components/WebAssembly/Hosting/AbpWebAssemblyHostBuilderExtensions.cs index 5c77dcff49..21f29f995c 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Microsoft/AspNetCore/Components/WebAssembly/Hosting/AbpWebAssemblyHostBuilderExtensions.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Microsoft/AspNetCore/Components/WebAssembly/Hosting/AbpWebAssemblyHostBuilderExtensions.cs @@ -1,15 +1,12 @@ using System; -using System.Globalization; using System.Runtime.CompilerServices; using System.Threading.Tasks; using JetBrains.Annotations; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Volo.Abp; -using Volo.Abp.AspNetCore.Components.Web; using Volo.Abp.AspNetCore.Components.Web.DependencyInjection; using Volo.Abp.AspNetCore.Components.WebAssembly; -using Volo.Abp.AspNetCore.Mvc.Client; using Volo.Abp.DependencyInjection; using Volo.Abp.Modularity; @@ -76,34 +73,5 @@ public static class AbpWebAssemblyHostBuilderExtensions .GetRequiredService()).ServiceProvider = serviceProvider; await application.InitializeAsync(serviceProvider); - await InitializeModulesAsync(serviceProvider); - await SetCurrentLanguageAsync(serviceProvider); - } - - private async static Task InitializeModulesAsync(IServiceProvider serviceProvider) - { - foreach (var service in serviceProvider.GetServices()) - { - await service.InitializeAsync(); - } - } - - private async static Task SetCurrentLanguageAsync(IServiceProvider serviceProvider) - { - var configurationClient = serviceProvider.GetRequiredService(); - var utilsService = serviceProvider.GetRequiredService(); - var configuration = await configurationClient.GetAsync(); - var cultureName = configuration.Localization?.CurrentCulture?.CultureName; - if (!cultureName.IsNullOrEmpty()) - { - var culture = new CultureInfo(cultureName); - CultureInfo.DefaultThreadCurrentCulture = culture; - CultureInfo.DefaultThreadCurrentUICulture = culture; - } - - if (CultureInfo.CurrentUICulture.TextInfo.IsRightToLeft) - { - await utilsService.AddClassToTagAsync("body", "rtl"); - } } } diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/AbpAspNetCoreComponentsWebAssemblyModule.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/AbpAspNetCoreComponentsWebAssemblyModule.cs index 56dd8106a3..5473213bee 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/AbpAspNetCoreComponentsWebAssemblyModule.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/AbpAspNetCoreComponentsWebAssemblyModule.cs @@ -1,10 +1,14 @@ -using Microsoft.Extensions.DependencyInjection; +using System; +using System.Globalization; +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Volo.Abp.AspNetCore.Components.Web; using Volo.Abp.AspNetCore.Components.Web.ExceptionHandling; using Volo.Abp.AspNetCore.Mvc.Client; using Volo.Abp.Http.Client; using Volo.Abp.Modularity; +using Volo.Abp.Threading; using Volo.Abp.UI; namespace Volo.Abp.AspNetCore.Components.WebAssembly; @@ -33,4 +37,34 @@ public class AbpAspNetCoreComponentsWebAssemblyModule : AbpModule .GetHostBuilder().Logging .AddProvider(new AbpExceptionHandlingLoggerProvider(context.Services)); } + + public override void OnApplicationInitialization(ApplicationInitializationContext context) + { + AsyncHelper.RunSync(() => OnApplicationInitializationAsync(context)); + } + + public async override Task OnApplicationInitializationAsync(ApplicationInitializationContext context) + { + await context.ServiceProvider.GetRequiredService().InitializeAsync(); + await SetCurrentLanguageAsync(context.ServiceProvider); + } + + private async static Task SetCurrentLanguageAsync(IServiceProvider serviceProvider) + { + var configurationClient = serviceProvider.GetRequiredService(); + var utilsService = serviceProvider.GetRequiredService(); + var configuration = await configurationClient.GetAsync(); + var cultureName = configuration.Localization?.CurrentCulture?.CultureName; + if (!cultureName.IsNullOrEmpty()) + { + var culture = new CultureInfo(cultureName); + CultureInfo.DefaultThreadCurrentCulture = culture; + CultureInfo.DefaultThreadCurrentUICulture = culture; + } + + if (CultureInfo.CurrentUICulture.TextInfo.IsRightToLeft) + { + await utilsService.AddClassToTagAsync("body", "rtl"); + } + } } diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/WebAssemblyCachedApplicationConfigurationClient.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/WebAssemblyCachedApplicationConfigurationClient.cs index 4dbd188a47..86dbd7ccdf 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/WebAssemblyCachedApplicationConfigurationClient.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/WebAssemblyCachedApplicationConfigurationClient.cs @@ -9,9 +9,8 @@ namespace Volo.Abp.AspNetCore.Components.WebAssembly; [ExposeServices( typeof(WebAssemblyCachedApplicationConfigurationClient), - typeof(ICachedApplicationConfigurationClient), - typeof(IAsyncInitialize) - )] + typeof(ICachedApplicationConfigurationClient) +)] public class WebAssemblyCachedApplicationConfigurationClient : ICachedApplicationConfigurationClient, ITransientDependency { protected AbpApplicationConfigurationClientProxy ApplicationConfigurationAppService { get; } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Client.Common/Volo/Abp/AspNetCore/Mvc/Client/ICachedApplicationConfigurationClient.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.Client.Common/Volo/Abp/AspNetCore/Mvc/Client/ICachedApplicationConfigurationClient.cs index f173082fa3..84621fd8c3 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.Client.Common/Volo/Abp/AspNetCore/Mvc/Client/ICachedApplicationConfigurationClient.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Client.Common/Volo/Abp/AspNetCore/Mvc/Client/ICachedApplicationConfigurationClient.cs @@ -3,7 +3,7 @@ using Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations; namespace Volo.Abp.AspNetCore.Mvc.Client; -public interface ICachedApplicationConfigurationClient : IAsyncInitialize +public interface ICachedApplicationConfigurationClient { Task GetAsync(); diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/AbpAspNetCoreMvcClientModule.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/AbpAspNetCoreMvcClientModule.cs index a7dc58f82a..7a9168eefb 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/AbpAspNetCoreMvcClientModule.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/AbpAspNetCoreMvcClientModule.cs @@ -1,5 +1,8 @@ -using Volo.Abp.EventBus; +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.EventBus; using Volo.Abp.Modularity; +using Volo.Abp.Threading; namespace Volo.Abp.AspNetCore.Mvc.Client; @@ -9,4 +12,13 @@ namespace Volo.Abp.AspNetCore.Mvc.Client; )] public class AbpAspNetCoreMvcClientModule : AbpModule { + public override void OnApplicationInitialization(ApplicationInitializationContext context) + { + AsyncHelper.RunSync(() => OnApplicationInitializationAsync(context)); + } + + public async override Task OnApplicationInitializationAsync(ApplicationInitializationContext context) + { + await context.ServiceProvider.GetRequiredService().InitializeAsync(); + } } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/MvcCachedApplicationConfigurationClient.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/MvcCachedApplicationConfigurationClient.cs index fba7a3fdfe..4450b2b59d 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/MvcCachedApplicationConfigurationClient.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/MvcCachedApplicationConfigurationClient.cs @@ -13,9 +13,8 @@ namespace Volo.Abp.AspNetCore.Mvc.Client; [ExposeServices( typeof(MvcCachedApplicationConfigurationClient), - typeof(ICachedApplicationConfigurationClient), - typeof(IAsyncInitialize) - )] + typeof(ICachedApplicationConfigurationClient) +)] public class MvcCachedApplicationConfigurationClient : ICachedApplicationConfigurationClient, ITransientDependency { protected IHttpContextAccessor HttpContextAccessor { get; } diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/IAsyncInitialize.cs b/framework/src/Volo.Abp.Core/Volo/Abp/IAsyncInitialize.cs deleted file mode 100644 index 3f0b16f06e..0000000000 --- a/framework/src/Volo.Abp.Core/Volo/Abp/IAsyncInitialize.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System.Threading.Tasks; - -namespace Volo.Abp; - -/// -/// IMPORTANT: THIS IS AN INTERNAL CLASS TO BE USED BY THE ABP FRAMEWORK. -/// IT WILL BE REMOVED IN THE FUTURE VERSIONS. DON'T USE IT! -/// -public interface IAsyncInitialize //TODO: Remove once we have async module initialization -{ - Task InitializeAsync(); -} From ab549a901167b63b71f930445dcb550d012c636c Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Wed, 8 Jun 2022 17:39:35 +0800 Subject: [PATCH 3/5] Add messageId to Rebus event bus --- .../EventBus/Rebus/RebusDistributedEventBus.cs | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs b/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs index 4ccd72ba15..bfe763d960 100644 --- a/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs +++ b/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs @@ -6,6 +6,7 @@ using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; using Rebus.Bus; +using Rebus.Messages; using Rebus.Pipeline; using Rebus.Transport; using Volo.Abp.DependencyInjection; @@ -154,7 +155,11 @@ public class RebusDistributedEventBus : DistributedEventBusBase, ISingletonDepen await PublishAsync(eventType, eventData); } - protected virtual async Task PublishAsync(Type eventType, object eventData) + protected virtual async Task PublishAsync( + Type eventType, + object eventData, + Guid? eventId = null, + Dictionary headersArguments = null) { if (AbpRebusEventBusOptions.Publish != null) { @@ -162,7 +167,13 @@ public class RebusDistributedEventBus : DistributedEventBusBase, ISingletonDepen return; } - await Rebus.Publish(eventData); + headersArguments ??= new Dictionary(); + if (!headersArguments.ContainsKey(Headers.MessageId)) + { + headersArguments[Headers.MessageId] = (eventId ?? GuidGenerator.Create()).ToString("N"); + } + + await Rebus.Publish(eventData, headersArguments); } protected override void AddToUnitOfWork(IUnitOfWork unitOfWork, UnitOfWorkEventRecord eventRecord) @@ -221,7 +232,7 @@ public class RebusDistributedEventBus : DistributedEventBusBase, ISingletonDepen var eventType = EventTypes.GetOrDefault(outgoingEvent.EventName); var eventData = Serializer.Deserialize(outgoingEvent.EventData, eventType); - return PublishToEventBusAsync(eventType, eventData); + return PublishAsync(eventType, eventData, eventId: outgoingEvent.Id); } public async override Task PublishManyFromOutboxAsync(IEnumerable outgoingEvents, OutboxConfig outboxConfig) From 1200ba94201b4ba205cb997230a5dcee0ec97f3a Mon Sep 17 00:00:00 2001 From: maliming Date: Wed, 8 Jun 2022 21:00:39 +0800 Subject: [PATCH 4/5] Remove the `ExposeServices`. --- .../Components/Web/Security/AbpComponentsClaimsCache.cs | 3 --- .../WebAssemblyCachedApplicationConfigurationClient.cs | 4 ---- .../Mvc/Client/MvcCachedApplicationConfigurationClient.cs | 4 ---- 3 files changed, 11 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web/Volo/Abp/AspNetCore/Components/Web/Security/AbpComponentsClaimsCache.cs b/framework/src/Volo.Abp.AspNetCore.Components.Web/Volo/Abp/AspNetCore/Components/Web/Security/AbpComponentsClaimsCache.cs index 318aada4c5..7473387f83 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.Web/Volo/Abp/AspNetCore/Components/Web/Security/AbpComponentsClaimsCache.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web/Volo/Abp/AspNetCore/Components/Web/Security/AbpComponentsClaimsCache.cs @@ -7,9 +7,6 @@ using Volo.Abp.DependencyInjection; namespace Volo.Abp.AspNetCore.Components.Web.Security; -[ExposeServices( - typeof(AbpComponentsClaimsCache) -)] public class AbpComponentsClaimsCache : IScopedDependency { public ClaimsPrincipal Principal { get; private set; } diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/WebAssemblyCachedApplicationConfigurationClient.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/WebAssemblyCachedApplicationConfigurationClient.cs index 86dbd7ccdf..523a770a17 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/WebAssemblyCachedApplicationConfigurationClient.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/WebAssemblyCachedApplicationConfigurationClient.cs @@ -7,10 +7,6 @@ using Volo.Abp.MultiTenancy; namespace Volo.Abp.AspNetCore.Components.WebAssembly; -[ExposeServices( - typeof(WebAssemblyCachedApplicationConfigurationClient), - typeof(ICachedApplicationConfigurationClient) -)] public class WebAssemblyCachedApplicationConfigurationClient : ICachedApplicationConfigurationClient, ITransientDependency { protected AbpApplicationConfigurationClientProxy ApplicationConfigurationAppService { get; } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/MvcCachedApplicationConfigurationClient.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/MvcCachedApplicationConfigurationClient.cs index 4450b2b59d..59690b2d03 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/MvcCachedApplicationConfigurationClient.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/MvcCachedApplicationConfigurationClient.cs @@ -11,10 +11,6 @@ using Volo.Abp.Users; namespace Volo.Abp.AspNetCore.Mvc.Client; -[ExposeServices( - typeof(MvcCachedApplicationConfigurationClient), - typeof(ICachedApplicationConfigurationClient) -)] public class MvcCachedApplicationConfigurationClient : ICachedApplicationConfigurationClient, ITransientDependency { protected IHttpContextAccessor HttpContextAccessor { get; } From 6c4f3da14812ffc00c50114c981ca3f3e1949106 Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 9 Jun 2022 11:30:24 +0800 Subject: [PATCH 5/5] Revert "Remove `IAsyncInitialize` interface." --- .../Web/AbpAspNetCoreComponentsWebModule.cs | 15 +------- .../Web/Security/AbpComponentsClaimsCache.cs | 6 +++- .../AbpWebAssemblyHostBuilderExtensions.cs | 32 +++++++++++++++++ ...bpAspNetCoreComponentsWebAssemblyModule.cs | 36 +------------------ ...blyCachedApplicationConfigurationClient.cs | 5 +++ .../ICachedApplicationConfigurationClient.cs | 2 +- .../Client/AbpAspNetCoreMvcClientModule.cs | 14 +------- ...MvcCachedApplicationConfigurationClient.cs | 5 +++ .../Volo/Abp/IAsyncInitialize.cs | 12 +++++++ 9 files changed, 63 insertions(+), 64 deletions(-) create mode 100644 framework/src/Volo.Abp.Core/Volo/Abp/IAsyncInitialize.cs diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web/Volo/Abp/AspNetCore/Components/Web/AbpAspNetCoreComponentsWebModule.cs b/framework/src/Volo.Abp.AspNetCore.Components.Web/Volo/Abp/AspNetCore/Components/Web/AbpAspNetCoreComponentsWebModule.cs index 50248d42ab..28984ce5d0 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.Web/Volo/Abp/AspNetCore/Components/Web/AbpAspNetCoreComponentsWebModule.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web/Volo/Abp/AspNetCore/Components/Web/AbpAspNetCoreComponentsWebModule.cs @@ -1,11 +1,8 @@ -using System.Threading.Tasks; -using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Components; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; using Volo.Abp.AspNetCore.Components.DependencyInjection; -using Volo.Abp.AspNetCore.Components.Web.Security; using Volo.Abp.Modularity; -using Volo.Abp.Threading; using Volo.Abp.UI; namespace Volo.Abp.AspNetCore.Components.Web; @@ -25,14 +22,4 @@ public class AbpAspNetCoreComponentsWebModule : AbpModule { context.Services.Replace(ServiceDescriptor.Transient()); } - - public override void OnApplicationInitialization(ApplicationInitializationContext context) - { - AsyncHelper.RunSync(() => OnApplicationInitializationAsync(context)); - } - - public async override Task OnApplicationInitializationAsync(ApplicationInitializationContext context) - { - await context.ServiceProvider.GetRequiredService().InitializeAsync(); - } } diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web/Volo/Abp/AspNetCore/Components/Web/Security/AbpComponentsClaimsCache.cs b/framework/src/Volo.Abp.AspNetCore.Components.Web/Volo/Abp/AspNetCore/Components/Web/Security/AbpComponentsClaimsCache.cs index 7473387f83..bb053eac21 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.Web/Volo/Abp/AspNetCore/Components/Web/Security/AbpComponentsClaimsCache.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web/Volo/Abp/AspNetCore/Components/Web/Security/AbpComponentsClaimsCache.cs @@ -7,7 +7,11 @@ using Volo.Abp.DependencyInjection; namespace Volo.Abp.AspNetCore.Components.Web.Security; -public class AbpComponentsClaimsCache : IScopedDependency +[ExposeServices( + typeof(AbpComponentsClaimsCache), + typeof(IAsyncInitialize) +)] +public class AbpComponentsClaimsCache : IScopedDependency, IAsyncInitialize { public ClaimsPrincipal Principal { get; private set; } diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Microsoft/AspNetCore/Components/WebAssembly/Hosting/AbpWebAssemblyHostBuilderExtensions.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Microsoft/AspNetCore/Components/WebAssembly/Hosting/AbpWebAssemblyHostBuilderExtensions.cs index 21f29f995c..5c77dcff49 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Microsoft/AspNetCore/Components/WebAssembly/Hosting/AbpWebAssemblyHostBuilderExtensions.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Microsoft/AspNetCore/Components/WebAssembly/Hosting/AbpWebAssemblyHostBuilderExtensions.cs @@ -1,12 +1,15 @@ using System; +using System.Globalization; using System.Runtime.CompilerServices; using System.Threading.Tasks; using JetBrains.Annotations; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Volo.Abp; +using Volo.Abp.AspNetCore.Components.Web; using Volo.Abp.AspNetCore.Components.Web.DependencyInjection; using Volo.Abp.AspNetCore.Components.WebAssembly; +using Volo.Abp.AspNetCore.Mvc.Client; using Volo.Abp.DependencyInjection; using Volo.Abp.Modularity; @@ -73,5 +76,34 @@ public static class AbpWebAssemblyHostBuilderExtensions .GetRequiredService()).ServiceProvider = serviceProvider; await application.InitializeAsync(serviceProvider); + await InitializeModulesAsync(serviceProvider); + await SetCurrentLanguageAsync(serviceProvider); + } + + private async static Task InitializeModulesAsync(IServiceProvider serviceProvider) + { + foreach (var service in serviceProvider.GetServices()) + { + await service.InitializeAsync(); + } + } + + private async static Task SetCurrentLanguageAsync(IServiceProvider serviceProvider) + { + var configurationClient = serviceProvider.GetRequiredService(); + var utilsService = serviceProvider.GetRequiredService(); + var configuration = await configurationClient.GetAsync(); + var cultureName = configuration.Localization?.CurrentCulture?.CultureName; + if (!cultureName.IsNullOrEmpty()) + { + var culture = new CultureInfo(cultureName); + CultureInfo.DefaultThreadCurrentCulture = culture; + CultureInfo.DefaultThreadCurrentUICulture = culture; + } + + if (CultureInfo.CurrentUICulture.TextInfo.IsRightToLeft) + { + await utilsService.AddClassToTagAsync("body", "rtl"); + } } } diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/AbpAspNetCoreComponentsWebAssemblyModule.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/AbpAspNetCoreComponentsWebAssemblyModule.cs index 5473213bee..56dd8106a3 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/AbpAspNetCoreComponentsWebAssemblyModule.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/AbpAspNetCoreComponentsWebAssemblyModule.cs @@ -1,14 +1,10 @@ -using System; -using System.Globalization; -using System.Threading.Tasks; -using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Volo.Abp.AspNetCore.Components.Web; using Volo.Abp.AspNetCore.Components.Web.ExceptionHandling; using Volo.Abp.AspNetCore.Mvc.Client; using Volo.Abp.Http.Client; using Volo.Abp.Modularity; -using Volo.Abp.Threading; using Volo.Abp.UI; namespace Volo.Abp.AspNetCore.Components.WebAssembly; @@ -37,34 +33,4 @@ public class AbpAspNetCoreComponentsWebAssemblyModule : AbpModule .GetHostBuilder().Logging .AddProvider(new AbpExceptionHandlingLoggerProvider(context.Services)); } - - public override void OnApplicationInitialization(ApplicationInitializationContext context) - { - AsyncHelper.RunSync(() => OnApplicationInitializationAsync(context)); - } - - public async override Task OnApplicationInitializationAsync(ApplicationInitializationContext context) - { - await context.ServiceProvider.GetRequiredService().InitializeAsync(); - await SetCurrentLanguageAsync(context.ServiceProvider); - } - - private async static Task SetCurrentLanguageAsync(IServiceProvider serviceProvider) - { - var configurationClient = serviceProvider.GetRequiredService(); - var utilsService = serviceProvider.GetRequiredService(); - var configuration = await configurationClient.GetAsync(); - var cultureName = configuration.Localization?.CurrentCulture?.CultureName; - if (!cultureName.IsNullOrEmpty()) - { - var culture = new CultureInfo(cultureName); - CultureInfo.DefaultThreadCurrentCulture = culture; - CultureInfo.DefaultThreadCurrentUICulture = culture; - } - - if (CultureInfo.CurrentUICulture.TextInfo.IsRightToLeft) - { - await utilsService.AddClassToTagAsync("body", "rtl"); - } - } } diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/WebAssemblyCachedApplicationConfigurationClient.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/WebAssemblyCachedApplicationConfigurationClient.cs index 523a770a17..4dbd188a47 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/WebAssemblyCachedApplicationConfigurationClient.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/WebAssemblyCachedApplicationConfigurationClient.cs @@ -7,6 +7,11 @@ using Volo.Abp.MultiTenancy; namespace Volo.Abp.AspNetCore.Components.WebAssembly; +[ExposeServices( + typeof(WebAssemblyCachedApplicationConfigurationClient), + typeof(ICachedApplicationConfigurationClient), + typeof(IAsyncInitialize) + )] public class WebAssemblyCachedApplicationConfigurationClient : ICachedApplicationConfigurationClient, ITransientDependency { protected AbpApplicationConfigurationClientProxy ApplicationConfigurationAppService { get; } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Client.Common/Volo/Abp/AspNetCore/Mvc/Client/ICachedApplicationConfigurationClient.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.Client.Common/Volo/Abp/AspNetCore/Mvc/Client/ICachedApplicationConfigurationClient.cs index 84621fd8c3..f173082fa3 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.Client.Common/Volo/Abp/AspNetCore/Mvc/Client/ICachedApplicationConfigurationClient.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Client.Common/Volo/Abp/AspNetCore/Mvc/Client/ICachedApplicationConfigurationClient.cs @@ -3,7 +3,7 @@ using Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations; namespace Volo.Abp.AspNetCore.Mvc.Client; -public interface ICachedApplicationConfigurationClient +public interface ICachedApplicationConfigurationClient : IAsyncInitialize { Task GetAsync(); diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/AbpAspNetCoreMvcClientModule.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/AbpAspNetCoreMvcClientModule.cs index 7a9168eefb..a7dc58f82a 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/AbpAspNetCoreMvcClientModule.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/AbpAspNetCoreMvcClientModule.cs @@ -1,8 +1,5 @@ -using System.Threading.Tasks; -using Microsoft.Extensions.DependencyInjection; -using Volo.Abp.EventBus; +using Volo.Abp.EventBus; using Volo.Abp.Modularity; -using Volo.Abp.Threading; namespace Volo.Abp.AspNetCore.Mvc.Client; @@ -12,13 +9,4 @@ namespace Volo.Abp.AspNetCore.Mvc.Client; )] public class AbpAspNetCoreMvcClientModule : AbpModule { - public override void OnApplicationInitialization(ApplicationInitializationContext context) - { - AsyncHelper.RunSync(() => OnApplicationInitializationAsync(context)); - } - - public async override Task OnApplicationInitializationAsync(ApplicationInitializationContext context) - { - await context.ServiceProvider.GetRequiredService().InitializeAsync(); - } } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/MvcCachedApplicationConfigurationClient.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/MvcCachedApplicationConfigurationClient.cs index 59690b2d03..fba7a3fdfe 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/MvcCachedApplicationConfigurationClient.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/MvcCachedApplicationConfigurationClient.cs @@ -11,6 +11,11 @@ using Volo.Abp.Users; namespace Volo.Abp.AspNetCore.Mvc.Client; +[ExposeServices( + typeof(MvcCachedApplicationConfigurationClient), + typeof(ICachedApplicationConfigurationClient), + typeof(IAsyncInitialize) + )] public class MvcCachedApplicationConfigurationClient : ICachedApplicationConfigurationClient, ITransientDependency { protected IHttpContextAccessor HttpContextAccessor { get; } diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/IAsyncInitialize.cs b/framework/src/Volo.Abp.Core/Volo/Abp/IAsyncInitialize.cs new file mode 100644 index 0000000000..3f0b16f06e --- /dev/null +++ b/framework/src/Volo.Abp.Core/Volo/Abp/IAsyncInitialize.cs @@ -0,0 +1,12 @@ +using System.Threading.Tasks; + +namespace Volo.Abp; + +/// +/// IMPORTANT: THIS IS AN INTERNAL CLASS TO BE USED BY THE ABP FRAMEWORK. +/// IT WILL BE REMOVED IN THE FUTURE VERSIONS. DON'T USE IT! +/// +public interface IAsyncInitialize //TODO: Remove once we have async module initialization +{ + Task InitializeAsync(); +}