mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-26 03:40:56 +08:00
Fixes #6316
This commit is contained in:
committed by
Sébastien Ros
parent
4f57ecb487
commit
fe4a116cb4
@@ -3,14 +3,26 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
using Orchard.Alias.Implementation.Map;
|
using Orchard.Alias.Implementation.Map;
|
||||||
|
using Orchard.Alias.Implementation.Updater;
|
||||||
|
|
||||||
namespace Orchard.Alias.Implementation.Holder {
|
namespace Orchard.Alias.Implementation.Holder {
|
||||||
public class AliasHolder : IAliasHolder {
|
public class AliasHolder : IAliasHolder {
|
||||||
public AliasHolder() {
|
private readonly Lazy<IAliasHolderUpdater> _aliasHolderUpdater;
|
||||||
|
private readonly ConcurrentDictionary<string, AliasMap> _aliasMaps;
|
||||||
|
|
||||||
|
public AliasHolder(Lazy<IAliasHolderUpdater> aliasHolderUpdater) {
|
||||||
|
_aliasHolderUpdater = aliasHolderUpdater;
|
||||||
_aliasMaps = new ConcurrentDictionary<string, AliasMap>(StringComparer.OrdinalIgnoreCase);
|
_aliasMaps = new ConcurrentDictionary<string, AliasMap>(StringComparer.OrdinalIgnoreCase);
|
||||||
}
|
}
|
||||||
|
|
||||||
private readonly ConcurrentDictionary<string, AliasMap> _aliasMaps;
|
private ConcurrentDictionary<string, AliasMap> GetOrRefreshAliasMaps() {
|
||||||
|
lock (_aliasMaps) {
|
||||||
|
if (_aliasMaps.Count == 0)
|
||||||
|
_aliasHolderUpdater.Value.Refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
return _aliasMaps;
|
||||||
|
}
|
||||||
|
|
||||||
public void SetAliases(IEnumerable<AliasInfo> aliases) {
|
public void SetAliases(IEnumerable<AliasInfo> aliases) {
|
||||||
var grouped = aliases.GroupBy(alias => alias.Area ?? String.Empty, StringComparer.InvariantCultureIgnoreCase);
|
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) {
|
public void SetAlias(AliasInfo alias) {
|
||||||
foreach (var map in _aliasMaps.Values) {
|
foreach (var map in GetOrRefreshAliasMaps().Values) {
|
||||||
map.Remove(alias);
|
map.Remove(alias);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -33,11 +45,11 @@ namespace Orchard.Alias.Implementation.Holder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerable<AliasMap> GetMaps() {
|
public IEnumerable<AliasMap> GetMaps() {
|
||||||
return _aliasMaps.Values;
|
return GetOrRefreshAliasMaps().Values;
|
||||||
}
|
}
|
||||||
|
|
||||||
public AliasMap GetMap(string areaName) {
|
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) {
|
public void RemoveAlias(AliasInfo aliasInfo) {
|
||||||
|
|||||||
@@ -44,7 +44,6 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<th scope="col">@T("Alias")</th>
|
<th scope="col">@T("Alias")</th>
|
||||||
<th scope="col">@T("Route")</th>
|
<th scope="col">@T("Route")</th>
|
||||||
<th scope="col"> </th>
|
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
@foreach (var aliasEntry in Model.AliasEntries) {
|
@foreach (var aliasEntry in Model.AliasEntries) {
|
||||||
|
|||||||
Reference in New Issue
Block a user