From 1ddcd11003ae6422ca78d4cb3530c289dd9ee6fc Mon Sep 17 00:00:00 2001 From: Halil ibrahim Kalkan Date: Thu, 6 Sep 2018 11:25:53 +0300 Subject: [PATCH] Added ServiceConfigurationContext to the AbpModule class. --- .../Volo/Abp/Modularity/AbpModule.cs | 22 +++++++++++++++++++ .../Volo/Abp/Modularity/ModuleLoader.cs | 16 ++++++++++++++ .../Volo/Abp/Ui/Navigation/MenuManager.cs | 8 +++++++ 3 files changed, 46 insertions(+) diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Modularity/AbpModule.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Modularity/AbpModule.cs index 276e3d4ecb..1da0932ada 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Modularity/AbpModule.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/Modularity/AbpModule.cs @@ -13,6 +13,22 @@ namespace Volo.Abp.Modularity IPreConfigureServices, IPostConfigureServices { + protected internal ServiceConfigurationContext ServiceConfigurationContext + { + get + { + if (_serviceConfigurationContext == null) + { + throw new AbpException($"{nameof(ServiceConfigurationContext)} is only available in the {nameof(PreConfigureServices)}, {nameof(PreConfigureServices)} and {nameof(PreConfigureServices)} methods."); + } + + return _serviceConfigurationContext; + } + internal set => _serviceConfigurationContext = value; + } + + private ServiceConfigurationContext _serviceConfigurationContext; + public virtual void PreConfigureServices(ServiceConfigurationContext context) { @@ -66,5 +82,11 @@ namespace Volo.Abp.Modularity throw new ArgumentException("Given type is not an ABP module: " + moduleType.AssemblyQualifiedName); } } + + protected void Configure(Action configureOptions) + where TOptions : class + { + ServiceConfigurationContext.Services.Configure(configureOptions); + } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Modularity/ModuleLoader.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Modularity/ModuleLoader.cs index d05103d920..bff094c0fc 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Modularity/ModuleLoader.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/Modularity/ModuleLoader.cs @@ -94,6 +94,14 @@ namespace Volo.Abp.Modularity var context = new ServiceConfigurationContext(services); services.AddSingleton(context); + foreach (var module in modules) + { + if (module.Instance is AbpModule abpModule) + { + abpModule.ServiceConfigurationContext = context; + } + } + //PreConfigureServices foreach (var module in modules.Where(m => m.Instance is IPreConfigureServices)) { @@ -111,6 +119,14 @@ namespace Volo.Abp.Modularity { ((IPostConfigureServices)module.Instance).PostConfigureServices(context); } + + foreach (var module in modules) + { + if (module.Instance is AbpModule abpModule) + { + abpModule.ServiceConfigurationContext = null; + } + } } protected virtual void SetDependencies(List modules, AbpModuleDescriptor module) diff --git a/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/MenuManager.cs b/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/MenuManager.cs index 204473551d..93b206a2b4 100644 --- a/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/MenuManager.cs +++ b/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/MenuManager.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; @@ -33,7 +34,14 @@ namespace Volo.Abp.UI.Navigation } } + NormalizeMenu(menu); + return menu; } + + protected virtual void NormalizeMenu(ApplicationMenu menu) + { + menu.Items.RemoveAll(item => item.IsLeaf && item.Url.IsNullOrEmpty()); + } } } \ No newline at end of file