Adding shape templates invalidation

This commit is contained in:
Sebastien Ros
2014-01-06 15:03:25 -08:00
parent f35b33fb9b
commit be296b4ac8
5 changed files with 30 additions and 5 deletions

View File

@@ -1,13 +1,16 @@
using Orchard.Compilation.Razor;
using Orchard.Caching;
using Orchard.Compilation.Razor;
using Orchard.ContentManagement.Handlers;
using Orchard.Data;
using Orchard.Templates.Models;
using Orchard.Templates.Services;
namespace Orchard.Templates.Handlers {
public class ShapePartHandler : ContentHandler {
private readonly IRazorTemplateHolder _razorTemplateHolder;
public ShapePartHandler(
ISignals signals,
IRepository<ShapePartRecord> repository,
IRazorTemplateHolder razorTemplateHolder) {
_razorTemplateHolder = razorTemplateHolder;
@@ -15,6 +18,8 @@ namespace Orchard.Templates.Handlers {
OnGetContentItemMetadata<ShapePart>((ctx, part) => ctx.Metadata.DisplayText = part.Name);
OnUpdated<ShapePart>((ctx, part) => _razorTemplateHolder.Set(part.Name, part.Template));
OnCreated<ShapePart>((ctx, part) => signals.Trigger(DefaultTemplateService.TemplatesSignal));
OnRemoved<ShapePart>((ctx, part) => signals.Trigger(DefaultTemplateService.TemplatesSignal));
}
}
}

View File

@@ -11,6 +11,8 @@ using Orchard.Templates.Models;
namespace Orchard.Templates.Services {
public class DefaultTemplateService : ITemplateService {
public const string TemplatesSignal = "Orchard.Templates";
private readonly IShapeFactory _shapeFactory;
private readonly IDisplayHelperFactory _displayHelperFactory;
private readonly IWorkContextAccessor _workContextAccessor;

View File

@@ -1,6 +1,7 @@
using System;
using System.Linq;
using System.Web;
using Orchard.Caching;
using Orchard.Compilation.Razor;
using Orchard.DisplayManagement.Descriptors;
using Orchard.DisplayManagement.Implementation;
@@ -8,15 +9,18 @@ using Orchard.Environment.Extensions.Models;
using Orchard.Mvc.Spooling;
namespace Orchard.Templates.Services {
public class TemplateBindingStrategy : IShapeTableProvider {
public class TemplateBindingStrategy : IShapeTableProvider, IShapeTableMonitor {
private readonly ITemplateService _templateService;
private readonly IRazorTemplateHolder _templateProvider;
private readonly ISignals _signals;
public TemplateBindingStrategy(
ITemplateService templateService,
IRazorTemplateHolder templateProvider) {
IRazorTemplateHolder templateProvider,
ISignals signals) {
_templateService = templateService;
_templateProvider = templateProvider;
_signals = signals;
}
public virtual Feature Feature { get; set; }
@@ -105,5 +109,8 @@ namespace Orchard.Templates.Services {
return invoke as IHtmlString ?? (invoke != null ? new HtmlString(invoke.ToString()) : null);
}
public void Monitor(Action<IVolatileToken> monitor) {
monitor(_signals.When(DefaultTemplateService.TemplatesSignal));
}
}
}

View File

@@ -17,18 +17,21 @@ namespace Orchard.DisplayManagement.Descriptors {
private readonly ICacheManager _cacheManager;
private readonly IParallelCacheContext _parallelCacheContext;
private readonly IEnumerable<IShapeTableEventHandler> _shapeTableEventHandlers;
private readonly IEnumerable<IShapeTableMonitor> _shapeTableMonitors;
public DefaultShapeTableManager(
IEnumerable<Meta<IShapeTableProvider>> bindingStrategies,
IExtensionManager extensionManager,
ICacheManager cacheManager,
IParallelCacheContext parallelCacheContext,
IEnumerable<IShapeTableEventHandler> shapeTableEventHandlers
IEnumerable<IShapeTableEventHandler> shapeTableEventHandlers,
IEnumerable<IShapeTableMonitor> shapeTableMonitors
) {
_extensionManager = extensionManager;
_cacheManager = cacheManager;
_parallelCacheContext = parallelCacheContext;
_shapeTableEventHandlers = shapeTableEventHandlers;
_shapeTableMonitors = shapeTableMonitors;
_bindingStrategies = bindingStrategies;
Logger = NullLogger.Instance;
}
@@ -78,6 +81,8 @@ namespace Orchard.DisplayManagement.Descriptors {
_shapeTableEventHandlers.Invoke(ctx => ctx.ShapeTableCreated(result), Logger);
_shapeTableMonitors.Invoke(ctx => ctx.Monitor(x.Monitor), Logger);
Logger.Information("Done building shape table");
return result;
});

View File

@@ -1,4 +1,6 @@
using Orchard.Events;
using System;
using Orchard.Caching;
using Orchard.Events;
namespace Orchard.DisplayManagement.Descriptors {
@@ -14,4 +16,8 @@ namespace Orchard.DisplayManagement.Descriptors {
void ShapeTableCreated(ShapeTable shapeTable);
}
public interface IShapeTableMonitor : IDependency {
void Monitor(Action<IVolatileToken> monitor);
}
}