mirror of https://github.com/abpframework/abp.git
9 changed files with 115 additions and 8 deletions
@ -0,0 +1,10 @@ |
|||||
|
namespace Volo.CmsKit.Public.Menus |
||||
|
{ |
||||
|
public class MainMenuCacheKey |
||||
|
{ |
||||
|
public override string ToString() |
||||
|
{ |
||||
|
return "MainMenu"; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,26 @@ |
|||||
|
using System.Threading.Tasks; |
||||
|
using Volo.Abp.DependencyInjection; |
||||
|
using Volo.Abp.Domain.Entities.Events; |
||||
|
using Volo.Abp.EventBus; |
||||
|
using Volo.Abp.EventBus.Distributed; |
||||
|
|
||||
|
namespace Volo.CmsKit.Menus |
||||
|
{ |
||||
|
public class MenuUpdatedHandler : ILocalEventHandler<EntityUpdatedEventData<Menu>>, ITransientDependency |
||||
|
{ |
||||
|
public IDistributedEventBus EventBus { get; } |
||||
|
|
||||
|
public MenuUpdatedHandler(IDistributedEventBus eventBus) |
||||
|
{ |
||||
|
EventBus = eventBus; |
||||
|
} |
||||
|
|
||||
|
public async Task HandleEventAsync(EntityUpdatedEventData<Menu> eventData) |
||||
|
{ |
||||
|
await EventBus.PublishAsync(new MenuUpdatedEto |
||||
|
{ |
||||
|
MenuId = eventData.Entity.Id |
||||
|
}); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,13 @@ |
|||||
|
using System; |
||||
|
using Volo.Abp.Domain.Entities.Events.Distributed; |
||||
|
using Volo.Abp.EventBus; |
||||
|
|
||||
|
namespace Volo.CmsKit.Menus |
||||
|
{ |
||||
|
[Serializable] |
||||
|
[EventName("Volo.CmsKit.Menus.Changed")] |
||||
|
public class MenuChangedEto : EtoBase |
||||
|
{ |
||||
|
public Guid MenuId { get; set; } |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,12 @@ |
|||||
|
using System; |
||||
|
using Volo.Abp.Domain.Entities.Events.Distributed; |
||||
|
using Volo.Abp.EventBus; |
||||
|
|
||||
|
namespace Volo.CmsKit.Menus |
||||
|
{ |
||||
|
[EventName("Volo.CmsKit.Menus.Updated")] |
||||
|
public class MenuUpdatedEto : EtoBase |
||||
|
{ |
||||
|
public Guid MenuId { get; set; } |
||||
|
} |
||||
|
} |
||||
@ -1,30 +1,50 @@ |
|||||
|
using System.Collections.Generic; |
||||
|
using System.Linq; |
||||
using System.Threading.Tasks; |
using System.Threading.Tasks; |
||||
|
using Volo.Abp.Caching; |
||||
using Volo.Abp.GlobalFeatures; |
using Volo.Abp.GlobalFeatures; |
||||
using Volo.CmsKit.GlobalFeatures; |
using Volo.CmsKit.GlobalFeatures; |
||||
using Volo.CmsKit.Menus; |
using Volo.CmsKit.Menus; |
||||
|
|
||||
namespace Volo.CmsKit.Public.Menus |
namespace Volo.CmsKit.Public.Menus |
||||
{ |
{ |
||||
[RequiresGlobalFeature(typeof(MenuFeature))] |
[RequiresGlobalFeature(typeof(MenuFeature))] |
||||
public class MenuPublicAppService : CmsKitPublicAppServiceBase, IMenuPublicAppService |
public class MenuPublicAppService : CmsKitPublicAppServiceBase, IMenuPublicAppService |
||||
{ |
{ |
||||
protected IMenuRepository MenuRepository { get; } |
protected IMenuRepository MenuRepository { get; } |
||||
|
|
||||
public MenuPublicAppService(IMenuRepository menuRepository) |
protected IDistributedCache<MenuWithDetailsDto, MainMenuCacheKey> DistributedCache { get; } |
||||
|
|
||||
|
public MenuPublicAppService( |
||||
|
IMenuRepository menuRepository, |
||||
|
IDistributedCache<MenuWithDetailsDto, MainMenuCacheKey> distributedCache) |
||||
{ |
{ |
||||
MenuRepository = menuRepository; |
MenuRepository = menuRepository; |
||||
|
DistributedCache = distributedCache; |
||||
} |
} |
||||
|
|
||||
public async Task<MenuWithDetailsDto> GetMainMenuAsync() |
public async Task<MenuWithDetailsDto> GetMainMenuAsync() |
||||
{ |
{ |
||||
var menu = await MenuRepository.FindMainMenuAsync(includeDetails: true); |
var cachedMenu = await DistributedCache.GetOrAddAsync( |
||||
|
new MainMenuCacheKey(), |
||||
|
async () => |
||||
|
{ |
||||
|
var menu = await MenuRepository.FindMainMenuAsync(includeDetails: true); |
||||
|
|
||||
|
if (menu == null) |
||||
|
{ |
||||
|
return null; |
||||
|
} |
||||
|
|
||||
if (menu == null) |
return ObjectMapper.Map<Menu, MenuWithDetailsDto>(menu); |
||||
|
}); |
||||
|
|
||||
|
if (cachedMenu == null) |
||||
{ |
{ |
||||
return null; |
return null; |
||||
} |
} |
||||
|
|
||||
return ObjectMapper.Map<Menu, MenuWithDetailsDto>(menu); |
return cachedMenu; |
||||
} |
} |
||||
} |
} |
||||
} |
} |
||||
@ -0,0 +1,23 @@ |
|||||
|
using System.Threading.Tasks; |
||||
|
using Volo.Abp.Caching; |
||||
|
using Volo.Abp.DependencyInjection; |
||||
|
using Volo.Abp.EventBus.Distributed; |
||||
|
using Volo.CmsKit.Menus; |
||||
|
|
||||
|
namespace Volo.CmsKit.Public.Menus |
||||
|
{ |
||||
|
public class MenuUpdatedHandler : IDistributedEventHandler<MenuUpdatedEto>, ITransientDependency |
||||
|
{ |
||||
|
protected IDistributedCache<MenuWithDetailsDto, MainMenuCacheKey> DistributedCache { get; } |
||||
|
|
||||
|
public MenuUpdatedHandler(IDistributedCache<MenuWithDetailsDto, MainMenuCacheKey> distributedCache) |
||||
|
{ |
||||
|
DistributedCache = distributedCache; |
||||
|
} |
||||
|
|
||||
|
public async Task HandleEventAsync(MenuUpdatedEto eventData) |
||||
|
{ |
||||
|
await DistributedCache.RemoveAsync(new MainMenuCacheKey()); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue