Browse Source

Added ServiceConfigurationContext to the AbpModule class.

pull/441/head
Halil ibrahim Kalkan 8 years ago
parent
commit
1ddcd11003
  1. 22
      framework/src/Volo.Abp.Core/Volo/Abp/Modularity/AbpModule.cs
  2. 16
      framework/src/Volo.Abp.Core/Volo/Abp/Modularity/ModuleLoader.cs
  3. 8
      framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/MenuManager.cs

22
framework/src/Volo.Abp.Core/Volo/Abp/Modularity/AbpModule.cs

@ -13,6 +13,22 @@ namespace Volo.Abp.Modularity
IPreConfigureServices, IPreConfigureServices,
IPostConfigureServices 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) 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); throw new ArgumentException("Given type is not an ABP module: " + moduleType.AssemblyQualifiedName);
} }
} }
protected void Configure<TOptions>(Action<TOptions> configureOptions)
where TOptions : class
{
ServiceConfigurationContext.Services.Configure(configureOptions);
}
} }
} }

16
framework/src/Volo.Abp.Core/Volo/Abp/Modularity/ModuleLoader.cs

@ -94,6 +94,14 @@ namespace Volo.Abp.Modularity
var context = new ServiceConfigurationContext(services); var context = new ServiceConfigurationContext(services);
services.AddSingleton(context); services.AddSingleton(context);
foreach (var module in modules)
{
if (module.Instance is AbpModule abpModule)
{
abpModule.ServiceConfigurationContext = context;
}
}
//PreConfigureServices //PreConfigureServices
foreach (var module in modules.Where(m => m.Instance is IPreConfigureServices)) foreach (var module in modules.Where(m => m.Instance is IPreConfigureServices))
{ {
@ -111,6 +119,14 @@ namespace Volo.Abp.Modularity
{ {
((IPostConfigureServices)module.Instance).PostConfigureServices(context); ((IPostConfigureServices)module.Instance).PostConfigureServices(context);
} }
foreach (var module in modules)
{
if (module.Instance is AbpModule abpModule)
{
abpModule.ServiceConfigurationContext = null;
}
}
} }
protected virtual void SetDependencies(List<AbpModuleDescriptor> modules, AbpModuleDescriptor module) protected virtual void SetDependencies(List<AbpModuleDescriptor> modules, AbpModuleDescriptor module)

8
framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/MenuManager.cs

@ -1,4 +1,5 @@
using System; using System;
using System.Collections.Generic;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
@ -33,7 +34,14 @@ namespace Volo.Abp.UI.Navigation
} }
} }
NormalizeMenu(menu);
return menu; return menu;
} }
protected virtual void NormalizeMenu(ApplicationMenu menu)
{
menu.Items.RemoveAll(item => item.IsLeaf && item.Url.IsNullOrEmpty());
}
} }
} }
Loading…
Cancel
Save