diff --git a/src/Orchard.Web/Modules/Orchard.Setup/SetupMode.cs b/src/Orchard.Web/Modules/Orchard.Setup/SetupMode.cs index f7f185abb..5db72cf02 100644 --- a/src/Orchard.Web/Modules/Orchard.Setup/SetupMode.cs +++ b/src/Orchard.Web/Modules/Orchard.Setup/SetupMode.cs @@ -1,8 +1,8 @@ using System; -using System.Collections.Generic; using System.Web.Routing; using Autofac; using JetBrains.Annotations; +using Orchard.Caching; using Orchard.Commands; using Orchard.Commands.Builtin; using Orchard.ContentManagement; @@ -46,6 +46,7 @@ namespace Orchard.Setup { builder.RegisterModule(new MvcModule()); builder.RegisterModule(new CommandModule()); builder.RegisterModule(new WorkContextModule()); + builder.RegisterModule(new CacheModule()); builder.RegisterType().As().InstancePerLifetimeScope(); builder.RegisterType().As().InstancePerLifetimeScope(); diff --git a/src/Orchard/DisplayManagement/Descriptors/DefaultShapeTableManager.cs b/src/Orchard/DisplayManagement/Descriptors/DefaultShapeTableManager.cs index e5cf361c6..0087b87b8 100644 --- a/src/Orchard/DisplayManagement/Descriptors/DefaultShapeTableManager.cs +++ b/src/Orchard/DisplayManagement/Descriptors/DefaultShapeTableManager.cs @@ -1,29 +1,30 @@ using System; -using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; using Autofac.Features.Metadata; +using Orchard.Caching; using Orchard.Environment.Extensions; using Orchard.Environment.Extensions.Models; using Orchard.Utility; namespace Orchard.DisplayManagement.Descriptors { - public class DefaultShapeTableManager : IShapeTableManager, ISingletonDependency { + public class DefaultShapeTableManager : IShapeTableManager { private readonly IEnumerable> _bindingStrategies; private readonly IExtensionManager _extensionManager; + private readonly ICacheManager _cacheManager; public DefaultShapeTableManager( IEnumerable> bindingStrategies, - IExtensionManager extensionManager) { + IExtensionManager extensionManager, + ICacheManager cacheManager) { _extensionManager = extensionManager; + _cacheManager = cacheManager; _bindingStrategies = bindingStrategies; } - readonly ConcurrentDictionary _tables = new ConcurrentDictionary(); - public ShapeTable GetShapeTable(string themeName) { - return _tables.GetOrAdd(themeName ?? "", x => { + return _cacheManager.Get(themeName ?? "", x => { var builderFactory = new ShapeTableBuilderFactory(); foreach (var bindingStrategy in _bindingStrategies) { Feature strategyDefaultFeature = bindingStrategy.Metadata.ContainsKey("Feature") ? diff --git a/src/Orchard/DisplayManagement/Descriptors/Interfaces.cs b/src/Orchard/DisplayManagement/Descriptors/Interfaces.cs index 11be14c3a..dfe5a13ba 100644 --- a/src/Orchard/DisplayManagement/Descriptors/Interfaces.cs +++ b/src/Orchard/DisplayManagement/Descriptors/Interfaces.cs @@ -1,6 +1,6 @@ namespace Orchard.DisplayManagement.Descriptors { - public interface IShapeTableManager : IDependency { + public interface IShapeTableManager : ISingletonDependency { ShapeTable GetShapeTable(string themeName); }