Browse Source

use an abstract navigation seed interface

pull/360/head
cKey 4 years ago
parent
commit
462aeca7f0
  1. 3
      aspnet-core/modules/navigation/LINGYUN.Abp.UI.Navigation/LINGYUN/Abp/UI/Navigation/AbpNavigationOptions.cs
  2. 19
      aspnet-core/modules/navigation/LINGYUN.Abp.UI.Navigation/LINGYUN/Abp/UI/Navigation/INavigationDataSeeder.cs
  3. 14
      aspnet-core/modules/navigation/LINGYUN.Abp.UI.Navigation/LINGYUN/Abp/UI/Navigation/INavigationSeedContributor.cs
  4. 43
      aspnet-core/modules/navigation/LINGYUN.Abp.UI.Navigation/LINGYUN/Abp/UI/Navigation/NavigationDataSeedContributor.cs
  5. 20
      aspnet-core/modules/navigation/LINGYUN.Abp.UI.Navigation/LINGYUN/Abp/UI/Navigation/NavigationSeedContext.cs
  6. 10
      aspnet-core/modules/navigation/LINGYUN.Abp.UI.Navigation/LINGYUN/Abp/UI/Navigation/NavigationSeedContributor.cs
  7. 18
      aspnet-core/modules/navigation/LINGYUN.Abp.UI.Navigation/LINGYUN/Abp/UI/Navigation/NullNavigationDataSeeder.cs
  8. 7
      aspnet-core/modules/platform/LINGYUN.Abp.UI.Navigation.VueVbenAdmin/LINGYUN/Abp/UI/Navigation/VueVbenAdmin/AbpUINavigationVueVbenAdminModule.cs
  9. 11
      aspnet-core/modules/platform/LINGYUN.Abp.UI.Navigation.VueVbenAdmin/LINGYUN/Abp/UI/Navigation/VueVbenAdmin/VueVbenAdminNavigationSeedContributor.cs

3
aspnet-core/modules/navigation/LINGYUN.Abp.UI.Navigation/LINGYUN/Abp/UI/Navigation/AbpNavigationOptions.cs

@ -6,9 +6,12 @@ namespace LINGYUN.Abp.UI.Navigation
{
public ITypeList<INavigationDefinitionProvider> DefinitionProviders { get; }
public ITypeList<INavigationSeedContributor> NavigationSeedContributors { get; }
public AbpNavigationOptions()
{
DefinitionProviders = new TypeList<INavigationDefinitionProvider>();
NavigationSeedContributors = new TypeList<INavigationSeedContributor>();
}
}
}

19
aspnet-core/modules/navigation/LINGYUN.Abp.UI.Navigation/LINGYUN/Abp/UI/Navigation/INavigationDataSeeder.cs

@ -1,19 +0,0 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using Volo.Abp.MultiTenancy;
namespace LINGYUN.Abp.UI.Navigation
{
public interface INavigationDataSeeder
{
/// <summary>
///
/// </summary>
/// <param name="menus">菜单列表</param>
/// <param name="multiTenancySides">让用户自行决定是否过滤菜单</param>
/// <returns></returns>
Task SeedAsync(
IReadOnlyCollection<ApplicationMenu> menus,
MultiTenancySides multiTenancySides = MultiTenancySides.Both);
}
}

14
aspnet-core/modules/navigation/LINGYUN.Abp.UI.Navigation/LINGYUN/Abp/UI/Navigation/INavigationSeedContributor.cs

@ -0,0 +1,14 @@
using System.Threading.Tasks;
namespace LINGYUN.Abp.UI.Navigation
{
public interface INavigationSeedContributor
{
/// <summary>
///
/// </summary>
/// <param name="context"></param>
/// <returns></returns>
Task SeedAsync(NavigationSeedContext context);
}
}

43
aspnet-core/modules/navigation/LINGYUN.Abp.UI.Navigation/LINGYUN/Abp/UI/Navigation/NavigationDataSeedContributor.cs

@ -1,4 +1,9 @@
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Volo.Abp.Data;
using Volo.Abp.DependencyInjection;
using Volo.Abp.MultiTenancy;
@ -7,32 +12,54 @@ namespace LINGYUN.Abp.UI.Navigation
{
public class NavigationDataSeedContributor : IDataSeedContributor, ITransientDependency
{
private readonly IServiceProvider _serviceProvider;
private readonly ICurrentTenant _currentTenant;
private readonly INavigationProvider _navigationProvider;
private readonly INavigationDataSeeder _navigationDataSeeder;
private readonly AbpNavigationOptions _options;
public List<INavigationSeedContributor> Contributors => _lazyContributors.Value;
private readonly Lazy<List<INavigationSeedContributor>> _lazyContributors;
public NavigationDataSeedContributor(
IServiceProvider serviceProvider,
ICurrentTenant currentTenant,
INavigationProvider navigationProvider,
INavigationDataSeeder navigationDataSeeder)
IOptions<AbpNavigationOptions> options)
{
_serviceProvider = serviceProvider;
_currentTenant = currentTenant;
_navigationProvider = navigationProvider;
_navigationDataSeeder = navigationDataSeeder;
_options = options.Value;
_lazyContributors = new Lazy<List<INavigationSeedContributor>>(CreateContributors);
}
public virtual async Task SeedAsync(DataSeedContext context)
{
using(_currentTenant.Change(context.TenantId))
using (_currentTenant.Change(context.TenantId))
{
var multiTenancySides = _currentTenant.Id.HasValue
var menus = await _navigationProvider.GetAllAsync();
var multiTenancySides = _currentTenant.IsAvailable
? MultiTenancySides.Tenant
: MultiTenancySides.Host;
var menus = await _navigationProvider.GetAllAsync();
var seedContext = new NavigationSeedContext(menus, multiTenancySides);
await _navigationDataSeeder.SeedAsync(menus, multiTenancySides);
foreach (var contributor in Contributors)
{
await contributor.SeedAsync(seedContext);
}
}
}
private List<INavigationSeedContributor> CreateContributors()
{
return _options
.NavigationSeedContributors
.Select(type => _serviceProvider.GetRequiredService(type) as INavigationSeedContributor)
.ToList();
}
}
}

20
aspnet-core/modules/navigation/LINGYUN.Abp.UI.Navigation/LINGYUN/Abp/UI/Navigation/NavigationSeedContext.cs

@ -0,0 +1,20 @@
using System.Collections.Generic;
using Volo.Abp.MultiTenancy;
namespace LINGYUN.Abp.UI.Navigation
{
public class NavigationSeedContext
{
public IReadOnlyCollection<ApplicationMenu> Menus { get; }
public MultiTenancySides MultiTenancySides { get; }
public NavigationSeedContext(
IReadOnlyCollection<ApplicationMenu> menus,
MultiTenancySides multiTenancySides = MultiTenancySides.Both)
{
Menus = menus;
MultiTenancySides = multiTenancySides;
}
}
}

10
aspnet-core/modules/navigation/LINGYUN.Abp.UI.Navigation/LINGYUN/Abp/UI/Navigation/NavigationSeedContributor.cs

@ -0,0 +1,10 @@
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
namespace LINGYUN.Abp.UI.Navigation
{
public abstract class NavigationSeedContributor : INavigationSeedContributor, ITransientDependency
{
public abstract Task SeedAsync(NavigationSeedContext context);
}
}

18
aspnet-core/modules/navigation/LINGYUN.Abp.UI.Navigation/LINGYUN/Abp/UI/Navigation/NullNavigationDataSeeder.cs

@ -1,18 +0,0 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
using Volo.Abp.MultiTenancy;
namespace LINGYUN.Abp.UI.Navigation
{
[Dependency(TryRegister = true)]
public class NullNavigationDataSeeder : INavigationDataSeeder, ISingletonDependency
{
public Task SeedAsync(
IReadOnlyCollection<ApplicationMenu> menus,
MultiTenancySides multiTenancySides = MultiTenancySides.Both)
{
return Task.CompletedTask;
}
}
}

7
aspnet-core/modules/platform/LINGYUN.Abp.UI.Navigation.VueVbenAdmin/LINGYUN/Abp/UI/Navigation/VueVbenAdmin/AbpUINavigationVueVbenAdminModule.cs

@ -8,5 +8,12 @@ namespace LINGYUN.Abp.UI.Navigation.VueVbenAdmin
typeof(PlatformDomainModule))]
public class AbpUINavigationVueVbenAdminModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
Configure<AbpNavigationOptions>(options =>
{
options.NavigationSeedContributors.Add<VueVbenAdminNavigationSeedContributor>();
});
}
}
}

11
aspnet-core/modules/platform/LINGYUN.Abp.UI.Navigation.VueVbenAdmin/LINGYUN/Abp/UI/Navigation/VueVbenAdmin/AbpUINavigationVueVbenAdminDataSeeder.cs → aspnet-core/modules/platform/LINGYUN.Abp.UI.Navigation.VueVbenAdmin/LINGYUN/Abp/UI/Navigation/VueVbenAdmin/VueVbenAdminNavigationSeedContributor.cs

@ -9,14 +9,13 @@ using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Volo.Abp.Data;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Guids;
using Volo.Abp.MultiTenancy;
using ValueType = LINGYUN.Platform.Datas.ValueType;
namespace LINGYUN.Abp.UI.Navigation.VueVbenAdmin
{
public class AbpUINavigationVueVbenAdminDataSeeder : INavigationDataSeeder, ITransientDependency
public class VueVbenAdminNavigationSeedContributor : NavigationSeedContributor
{
private static int _lastCodeNumber = 0;
protected ICurrentTenant CurrentTenant { get; }
@ -27,7 +26,7 @@ namespace LINGYUN.Abp.UI.Navigation.VueVbenAdmin
protected ILayoutRepository LayoutRepository { get; }
protected AbpUINavigationVueVbenAdminOptions Options { get; }
public AbpUINavigationVueVbenAdminDataSeeder(
public VueVbenAdminNavigationSeedContributor(
ICurrentTenant currentTenant,
IRouteDataSeeder routeDataSeeder,
IMenuRepository menuRepository,
@ -46,9 +45,7 @@ namespace LINGYUN.Abp.UI.Navigation.VueVbenAdmin
Options = options.Value;
}
public virtual async Task SeedAsync(
IReadOnlyCollection<ApplicationMenu> menus,
MultiTenancySides multiTenancySides = MultiTenancySides.Both)
public override async Task SeedAsync(NavigationSeedContext context)
{
var uiDataItem = await SeedUIFrameworkDataAsync(CurrentTenant.Id);
@ -63,7 +60,7 @@ namespace LINGYUN.Abp.UI.Navigation.VueVbenAdmin
Interlocked.Exchange(ref _lastCodeNumber, _lastNumber);
}
await SeedDefinitionMenusAsync(layout, layoutData, menus, multiTenancySides);
await SeedDefinitionMenusAsync(layout, layoutData, context.Menus, context.MultiTenancySides);
}
private async Task SeedDefinitionMenusAsync(
Loading…
Cancel
Save