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,
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<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);
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<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.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());
}
}
}
Loading…
Cancel
Save