From cce3a0e1ede89b1173e2298c4edc0c407a6b1838 Mon Sep 17 00:00:00 2001 From: Sipke Schoorstra Date: Tue, 20 May 2014 20:16:14 +0200 Subject: [PATCH] Making the WorkContext on WebViewPage available for shapes being rendered in background tasks as well. --- .../Services/Razor/RazorTemplateBase.cs | 1 + .../Services/RazorTemplateProcessor.cs | 6 +++++- .../Mvc/ViewEngines/Razor/WebViewPage.cs | 17 ++++++++--------- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/Orchard.Web/Modules/Orchard.Templates/Services/Razor/RazorTemplateBase.cs b/src/Orchard.Web/Modules/Orchard.Templates/Services/Razor/RazorTemplateBase.cs index d070700ce..5e07235d4 100644 --- a/src/Orchard.Web/Modules/Orchard.Templates/Services/Razor/RazorTemplateBase.cs +++ b/src/Orchard.Web/Modules/Orchard.Templates/Services/Razor/RazorTemplateBase.cs @@ -8,6 +8,7 @@ namespace Orchard.Templates.Compilation.Razor { WebPageContext WebPageContext { get; set; } ViewContext ViewContext { get; set; } ViewDataDictionary ViewData { get; set; } + WorkContext WorkContext { get; set; } string VirtualPath { get; set; } void Render(TextWriter writer); void InitHelpers(); diff --git a/src/Orchard.Web/Modules/Orchard.Templates/Services/RazorTemplateProcessor.cs b/src/Orchard.Web/Modules/Orchard.Templates/Services/RazorTemplateProcessor.cs index 88735f926..ae8033bb3 100644 --- a/src/Orchard.Web/Modules/Orchard.Templates/Services/RazorTemplateProcessor.cs +++ b/src/Orchard.Web/Modules/Orchard.Templates/Services/RazorTemplateProcessor.cs @@ -16,6 +16,7 @@ namespace Orchard.Templates.Services { public class RazorTemplateProcessor : TemplateProcessorImpl { private readonly IRazorCompiler _compiler; private readonly HttpContextBase _httpContextBase; + private readonly IWorkContextAccessor _wca; public override string Type { get { return "Razor"; } @@ -23,9 +24,11 @@ namespace Orchard.Templates.Services { public RazorTemplateProcessor( IRazorCompiler compiler, - HttpContextBase httpContextBase) { + HttpContextBase httpContextBase, + IWorkContextAccessor wca) { _compiler = compiler; _httpContextBase = httpContextBase; + _wca = wca; Logger = NullLogger.Instance; } @@ -68,6 +71,7 @@ namespace Orchard.Templates.Services { obj.ViewData = new ViewDataDictionary(model); obj.WebPageContext = new WebPageContext(_httpContextBase, obj as WebPageRenderingBase, model); + obj.WorkContext = _wca.GetContext(); } obj.VirtualPath = templateVirtualPath ?? "~/Themes/Orchard.Templates"; diff --git a/src/Orchard/Mvc/ViewEngines/Razor/WebViewPage.cs b/src/Orchard/Mvc/ViewEngines/Razor/WebViewPage.cs index 5ab9a5f73..5e86c24ac 100644 --- a/src/Orchard/Mvc/ViewEngines/Razor/WebViewPage.cs +++ b/src/Orchard/Mvc/ViewEngines/Razor/WebViewPage.cs @@ -22,7 +22,6 @@ namespace Orchard.Mvc.ViewEngines.Razor { private Localizer _localizer = NullLocalizer.Instance; private object _display; private object _layout; - private WorkContext _workContext; public Localizer T { get { @@ -61,35 +60,35 @@ namespace Orchard.Mvc.ViewEngines.Razor { public dynamic Display { get { return _display; } } // review: (heskew) is it going to be a problem? public new dynamic Layout { get { return _layout; } } - public WorkContext WorkContext { get { return _workContext; } } + public WorkContext WorkContext { get; set; } public dynamic New { get { return ShapeFactory; } } private IDisplayHelperFactory _displayHelperFactory; public IDisplayHelperFactory DisplayHelperFactory { get { - return _displayHelperFactory ?? (_displayHelperFactory = _workContext.Resolve()); + return _displayHelperFactory ?? (_displayHelperFactory = WorkContext.Resolve()); } } private IShapeFactory _shapeFactory; public IShapeFactory ShapeFactory { get { - return _shapeFactory ?? (_shapeFactory = _workContext.Resolve()); + return _shapeFactory ?? (_shapeFactory = WorkContext.Resolve()); } } private IAuthorizer _authorizer; public IAuthorizer Authorizer { get { - return _authorizer ?? (_authorizer = _workContext.Resolve()); + return _authorizer ?? (_authorizer = WorkContext.Resolve()); } } private IContentManager _contentManager; public dynamic BuildDisplay(IContent content, string displayType = "", string groupId = "") { if (_contentManager == null) { - _contentManager = _workContext.Resolve(); + _contentManager = WorkContext.Resolve(); } return _contentManager.BuildDisplay(content, displayType, groupId); @@ -104,7 +103,7 @@ namespace Orchard.Mvc.ViewEngines.Razor { private IResourceManager _resourceManager; public IResourceManager ResourceManager { - get { return _resourceManager ?? (_resourceManager = _workContext.Resolve()); } + get { return _resourceManager ?? (_resourceManager = WorkContext.Resolve()); } } public ResourceRegister Style { @@ -164,10 +163,10 @@ namespace Orchard.Mvc.ViewEngines.Razor { public override void InitHelpers() { base.InitHelpers(); - _workContext = ViewContext.GetWorkContext(); + WorkContext = ViewContext.GetWorkContext(); _display = DisplayHelperFactory.CreateHelper(ViewContext, this); - _layout = _workContext.Layout; + _layout = WorkContext.Layout; } public bool AuthorizedFor(Permission permission) {