mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2026-02-09 09:16:41 +08:00
Adding shape templates invalidation
This commit is contained in:
@@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
});
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user