From fe4a116cb44b2df51d77c2d596de92f50c1e6139 Mon Sep 17 00:00:00 2001 From: Hannan Azam Khan Date: Fri, 6 Jan 2017 01:37:18 +0500 Subject: [PATCH] [Fixes #6316] Update Alias when importing AutoroutePart (#7485) Fixes #6316 --- .../Implementation/Holder/AliasHolder.cs | 22 ++++++++++++++----- .../Views/Admin/IndexManaged.cshtml | 1 - 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/Orchard.Web/Modules/Orchard.Alias/Implementation/Holder/AliasHolder.cs b/src/Orchard.Web/Modules/Orchard.Alias/Implementation/Holder/AliasHolder.cs index 59aaab795..c396afd24 100644 --- a/src/Orchard.Web/Modules/Orchard.Alias/Implementation/Holder/AliasHolder.cs +++ b/src/Orchard.Web/Modules/Orchard.Alias/Implementation/Holder/AliasHolder.cs @@ -3,14 +3,26 @@ using System.Collections.Generic; using System.Linq; using System.Collections.Concurrent; using Orchard.Alias.Implementation.Map; +using Orchard.Alias.Implementation.Updater; namespace Orchard.Alias.Implementation.Holder { public class AliasHolder : IAliasHolder { - public AliasHolder() { + private readonly Lazy _aliasHolderUpdater; + private readonly ConcurrentDictionary _aliasMaps; + + public AliasHolder(Lazy aliasHolderUpdater) { + _aliasHolderUpdater = aliasHolderUpdater; _aliasMaps = new ConcurrentDictionary(StringComparer.OrdinalIgnoreCase); } - private readonly ConcurrentDictionary _aliasMaps; + private ConcurrentDictionary GetOrRefreshAliasMaps() { + lock (_aliasMaps) { + if (_aliasMaps.Count == 0) + _aliasHolderUpdater.Value.Refresh(); + } + + return _aliasMaps; + } public void SetAliases(IEnumerable aliases) { var grouped = aliases.GroupBy(alias => alias.Area ?? String.Empty, StringComparer.InvariantCultureIgnoreCase); @@ -25,7 +37,7 @@ namespace Orchard.Alias.Implementation.Holder { } public void SetAlias(AliasInfo alias) { - foreach (var map in _aliasMaps.Values) { + foreach (var map in GetOrRefreshAliasMaps().Values) { map.Remove(alias); } @@ -33,11 +45,11 @@ namespace Orchard.Alias.Implementation.Holder { } public IEnumerable GetMaps() { - return _aliasMaps.Values; + return GetOrRefreshAliasMaps().Values; } public AliasMap GetMap(string areaName) { - return _aliasMaps.GetOrAdd(areaName ?? String.Empty, key => new AliasMap(key)); + return GetOrRefreshAliasMaps().GetOrAdd(areaName ?? String.Empty, key => new AliasMap(key)); } public void RemoveAlias(AliasInfo aliasInfo) { diff --git a/src/Orchard.Web/Modules/Orchard.Alias/Views/Admin/IndexManaged.cshtml b/src/Orchard.Web/Modules/Orchard.Alias/Views/Admin/IndexManaged.cshtml index 6404513b8..7bcee7ab4 100644 --- a/src/Orchard.Web/Modules/Orchard.Alias/Views/Admin/IndexManaged.cshtml +++ b/src/Orchard.Web/Modules/Orchard.Alias/Views/Admin/IndexManaged.cshtml @@ -44,7 +44,6 @@ @T("Alias") @T("Route") -   @foreach (var aliasEntry in Model.AliasEntries) {