From e88161c0d013fe9cf9154629c48dda309cb9960f Mon Sep 17 00:00:00 2001 From: maliming <6908465+maliming@users.noreply.github.com> Date: Thu, 21 May 2020 14:56:37 +0800 Subject: [PATCH] Add useful services to IToolbarConfigurationContext and MenuConfigurationContext Resolve #4017 --- .../Toolbars/IToolbarConfigurationContext.cs | 11 +++++-- .../Toolbars/ToolbarConfigurationContext.cs | 32 +++++++++++++++++-- .../Volo.Abp.UI.Navigation.csproj | 1 + .../Ui/Navigation/AbpUiNavigationModule.cs | 6 ++-- .../Navigation/IMenuConfigurationContext.cs | 9 ++++-- .../Ui/Navigation/MenuConfigurationContext.cs | 32 +++++++++++++++++-- 6 files changed, 77 insertions(+), 14 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Toolbars/IToolbarConfigurationContext.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Toolbars/IToolbarConfigurationContext.cs index f33b9fdebc..7e66da1a72 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Toolbars/IToolbarConfigurationContext.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Toolbars/IToolbarConfigurationContext.cs @@ -1,4 +1,7 @@ -using Volo.Abp.AspNetCore.Mvc.UI.Theming; +using System; +using Microsoft.AspNetCore.Authorization; +using Microsoft.Extensions.Localization; +using Volo.Abp.AspNetCore.Mvc.UI.Theming; using Volo.Abp.DependencyInjection; namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Toolbars @@ -8,5 +11,9 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Toolbars ITheme Theme { get; } Toolbar Toolbar { get; } + + IAuthorizationService AuthorizationService { get; } + + IStringLocalizerFactory StringLocalizerFactory { get; } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Toolbars/ToolbarConfigurationContext.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Toolbars/ToolbarConfigurationContext.cs index 4b696512bf..76808f79fb 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Toolbars/ToolbarConfigurationContext.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Toolbars/ToolbarConfigurationContext.cs @@ -1,16 +1,42 @@ using System; +using Microsoft.AspNetCore.Authorization; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Localization; using Volo.Abp.AspNetCore.Mvc.UI.Theming; namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Toolbars { public class ToolbarConfigurationContext : IToolbarConfigurationContext { + public IServiceProvider ServiceProvider { get; } + private readonly object _serviceProviderLock = new object(); + + private TRef LazyGetRequiredService(Type serviceType, ref TRef reference) + { + if (reference == null) + { + lock (_serviceProviderLock) + { + if (reference == null) + { + reference = (TRef)ServiceProvider.GetRequiredService(serviceType); + } + } + } + + return reference; + } + + public IAuthorizationService AuthorizationService => LazyGetRequiredService(typeof(IAuthorizationService), ref _authorizationService); + private IAuthorizationService _authorizationService; + + private IStringLocalizerFactory _stringLocalizerFactory; + public IStringLocalizerFactory StringLocalizerFactory => LazyGetRequiredService(typeof(IStringLocalizerFactory),ref _stringLocalizerFactory); + public ITheme Theme { get; } public Toolbar Toolbar { get; } - public IServiceProvider ServiceProvider { get; } - public ToolbarConfigurationContext(ITheme currentTheme, Toolbar toolbar, IServiceProvider serviceProvider) { Theme = currentTheme; @@ -18,4 +44,4 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Toolbars ServiceProvider = serviceProvider; } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.UI.Navigation/Volo.Abp.UI.Navigation.csproj b/framework/src/Volo.Abp.UI.Navigation/Volo.Abp.UI.Navigation.csproj index 5236bf0404..77d95d186d 100644 --- a/framework/src/Volo.Abp.UI.Navigation/Volo.Abp.UI.Navigation.csproj +++ b/framework/src/Volo.Abp.UI.Navigation/Volo.Abp.UI.Navigation.csproj @@ -20,6 +20,7 @@ + diff --git a/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/AbpUiNavigationModule.cs b/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/AbpUiNavigationModule.cs index 47889336a8..80c160e4a5 100644 --- a/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/AbpUiNavigationModule.cs +++ b/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/AbpUiNavigationModule.cs @@ -1,12 +1,12 @@ -using Volo.Abp.Localization; +using Volo.Abp.Authorization; +using Volo.Abp.Localization; using Volo.Abp.Modularity; -using Volo.Abp.UI.Navigation; using Volo.Abp.UI.Navigation.Localization.Resource; using Volo.Abp.VirtualFileSystem; namespace Volo.Abp.UI.Navigation { - [DependsOn(typeof(AbpUiModule))] + [DependsOn(typeof(AbpUiModule), typeof(AbpAuthorizationModule))] public class AbpUiNavigationModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) diff --git a/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/IMenuConfigurationContext.cs b/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/IMenuConfigurationContext.cs index 92b0a89c5e..cde960064a 100644 --- a/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/IMenuConfigurationContext.cs +++ b/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/IMenuConfigurationContext.cs @@ -1,4 +1,5 @@ -using System; +using Microsoft.AspNetCore.Authorization; +using Microsoft.Extensions.Localization; using Volo.Abp.DependencyInjection; namespace Volo.Abp.UI.Navigation @@ -7,6 +8,8 @@ namespace Volo.Abp.UI.Navigation { ApplicationMenu Menu { get; } - //TODO: Add Localization, Authorization components since they are most used components on menu creation! + IAuthorizationService AuthorizationService { get; } + + IStringLocalizerFactory StringLocalizerFactory { get; } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/MenuConfigurationContext.cs b/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/MenuConfigurationContext.cs index 4231d6f2df..f4e59cab0c 100644 --- a/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/MenuConfigurationContext.cs +++ b/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/MenuConfigurationContext.cs @@ -1,12 +1,38 @@ using System; +using Microsoft.AspNetCore.Authorization; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Localization; namespace Volo.Abp.UI.Navigation { public class MenuConfigurationContext : IMenuConfigurationContext { - public ApplicationMenu Menu { get; } - public IServiceProvider ServiceProvider { get; } + private readonly object _serviceProviderLock = new object(); + + private TRef LazyGetRequiredService(Type serviceType, ref TRef reference) + { + if (reference == null) + { + lock (_serviceProviderLock) + { + if (reference == null) + { + reference = (TRef)ServiceProvider.GetRequiredService(serviceType); + } + } + } + + return reference; + } + + public IAuthorizationService AuthorizationService => LazyGetRequiredService(typeof(IAuthorizationService), ref _authorizationService); + private IAuthorizationService _authorizationService; + + private IStringLocalizerFactory _stringLocalizerFactory; + public IStringLocalizerFactory StringLocalizerFactory => LazyGetRequiredService(typeof(IStringLocalizerFactory),ref _stringLocalizerFactory); + + public ApplicationMenu Menu { get; } public MenuConfigurationContext(ApplicationMenu menu, IServiceProvider serviceProvider) { @@ -14,4 +40,4 @@ namespace Volo.Abp.UI.Navigation ServiceProvider = serviceProvider; } } -} \ No newline at end of file +}