parent
75084ba0cd
commit
20eadb94ee
|
|
@ -6,10 +6,10 @@ using Microsoft.AspNet.FileSystems;
|
|||
|
||||
namespace Microsoft.AspNet.Mvc.Razor
|
||||
{
|
||||
public interface ICompilerCache
|
||||
{
|
||||
public interface ICompilerCache
|
||||
{
|
||||
CompilationResult GetOrAdd([NotNull] RelativeFileInfo fileInfo,
|
||||
bool enableInstrumentation,
|
||||
[NotNull] Func<CompilationResult> compile);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -12,8 +12,7 @@ namespace Microsoft.AspNet.Mvc.Razor
|
|||
/// Creates a <see cref="IRazorPage"/> for the specified path.
|
||||
/// </summary>
|
||||
/// <param name="relativePath">The path to locate the page.</param>
|
||||
/// <param name="enableInstrumentation">Indicates that execution of the page should be instrumented.</param>
|
||||
/// <returns>The IRazorPage instance if it exists, null otherwise.</returns>
|
||||
IRazorPage CreateInstance(string relativePath, bool enableInstrumentation);
|
||||
IRazorPage CreateInstance(string relativePath);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@
|
|||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||
|
||||
using Microsoft.AspNet.Mvc.Rendering;
|
||||
using Microsoft.AspNet.PageExecutionInstrumentation;
|
||||
|
||||
namespace Microsoft.AspNet.Mvc.Razor
|
||||
{
|
||||
|
|
@ -18,8 +17,6 @@ namespace Microsoft.AspNet.Mvc.Razor
|
|||
/// </summary>
|
||||
/// <param name="razorPage">The <see cref="IRazorPage"/> instance to execute.</param>
|
||||
/// <param name="isPartial">Determines if the view is to be executed as a partial.</param>
|
||||
void Contextualize(IRazorPage razorPage,
|
||||
bool isPartial,
|
||||
IPageExecutionListenerFeature pageExecutionListenerFeature);
|
||||
void Contextualize(IRazorPage razorPage, bool isPartial);
|
||||
}
|
||||
}
|
||||
|
|
@ -15,8 +15,7 @@ namespace Microsoft.AspNet.Mvc.Razor
|
|||
/// that are applicable to the specified view.
|
||||
/// </summary>
|
||||
/// <param name="path">The path of the page to locate ViewStart files for.</param>
|
||||
/// <param name="enableInstrumentation">Indicates that execution of the page should be instrumented.</param>
|
||||
/// <returns>A sequence of <see cref="IRazorPage"/> that represent ViewStart.</returns>
|
||||
IEnumerable<IRazorPage> GetViewStartPages(string path, bool enableInstrumentation);
|
||||
IEnumerable<IRazorPage> GetViewStartPages(string path);
|
||||
}
|
||||
}
|
||||
|
|
@ -44,12 +44,10 @@ namespace Microsoft.AspNet.Mvc.Razor
|
|||
|
||||
/// <inheritdoc />
|
||||
public virtual void Contextualize([NotNull] IRazorPage razorPage,
|
||||
bool isPartial,
|
||||
IPageExecutionListenerFeature pageExecutionListener)
|
||||
bool isPartial)
|
||||
{
|
||||
_razorPage = razorPage;
|
||||
_isPartial = isPartial;
|
||||
_pageExecutionFeature = pageExecutionListener;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
|
|
@ -61,6 +59,8 @@ namespace Microsoft.AspNet.Mvc.Razor
|
|||
throw new InvalidOperationException(message);
|
||||
}
|
||||
|
||||
_pageExecutionFeature = context.HttpContext.GetFeature<IPageExecutionListenerFeature>();
|
||||
|
||||
if (!_isPartial)
|
||||
{
|
||||
var bodyWriter = await RenderPageAsync(_razorPage, context, executeViewStart: true);
|
||||
|
|
@ -131,7 +131,7 @@ namespace Microsoft.AspNet.Mvc.Razor
|
|||
|
||||
private async Task RenderViewStartAsync(ViewContext context)
|
||||
{
|
||||
var viewStarts = _viewStartProvider.GetViewStartPages(_razorPage.Path, EnableInstrumentation);
|
||||
var viewStarts = _viewStartProvider.GetViewStartPages(_razorPage.Path);
|
||||
|
||||
foreach (var viewStart in viewStarts)
|
||||
{
|
||||
|
|
@ -161,7 +161,7 @@ namespace Microsoft.AspNet.Mvc.Razor
|
|||
throw new InvalidOperationException(message);
|
||||
}
|
||||
|
||||
var layoutPage = _pageFactory.CreateInstance(previousPage.Layout, EnableInstrumentation);
|
||||
var layoutPage = _pageFactory.CreateInstance(previousPage.Layout);
|
||||
if (layoutPage == null)
|
||||
{
|
||||
var message = Resources.FormatLayoutCannotBeLocated(previousPage.Layout);
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@
|
|||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Globalization;
|
||||
using Microsoft.AspNet.Mvc.Razor.OptionDescriptors;
|
||||
using Microsoft.AspNet.Mvc.Rendering;
|
||||
|
|
@ -37,9 +36,6 @@ namespace Microsoft.AspNet.Mvc.Razor
|
|||
private readonly IRazorPageFactory _pageFactory;
|
||||
private readonly IReadOnlyList<IViewLocationExpander> _viewLocationExpanders;
|
||||
private readonly IViewLocationCache _viewLocationCache;
|
||||
// The RazorViewEngine is Request scoped which allows us to cache these value for the lifetime of a Request.
|
||||
private bool _isPageExecutionFeatureInitialized;
|
||||
private IPageExecutionListenerFeature _pageExecutionListenerFeature;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="RazorViewEngine" /> class.
|
||||
|
|
@ -95,7 +91,7 @@ namespace Microsoft.AspNet.Mvc.Razor
|
|||
{
|
||||
if (viewName.EndsWith(ViewExtension, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
var page = _pageFactory.CreateInstance(viewName, IsInstrumentationEnabled(context));
|
||||
var page = _pageFactory.CreateInstance(viewName);
|
||||
if (page != null)
|
||||
{
|
||||
return CreateFoundResult(context, page, viewName, partial);
|
||||
|
|
@ -137,7 +133,7 @@ namespace Microsoft.AspNet.Mvc.Razor
|
|||
var viewLocation = _viewLocationCache.Get(expanderContext);
|
||||
if (!string.IsNullOrEmpty(viewLocation))
|
||||
{
|
||||
var page = _pageFactory.CreateInstance(viewLocation, IsInstrumentationEnabled(context));
|
||||
var page = _pageFactory.CreateInstance(viewLocation);
|
||||
|
||||
if (page != null)
|
||||
{
|
||||
|
|
@ -163,9 +159,7 @@ namespace Microsoft.AspNet.Mvc.Razor
|
|||
viewName,
|
||||
controllerName,
|
||||
areaName);
|
||||
|
||||
var isInstrumentated = IsInstrumentationEnabled(context);
|
||||
var page = _pageFactory.CreateInstance(transformedPath, isInstrumentated);
|
||||
var page = _pageFactory.CreateInstance(transformedPath);
|
||||
if (page != null)
|
||||
{
|
||||
// 3a. We found a page. Cache the set of values that produced it and return a found result.
|
||||
|
|
@ -190,9 +184,8 @@ namespace Microsoft.AspNet.Mvc.Razor
|
|||
|
||||
var services = actionContext.HttpContext.RequestServices;
|
||||
var view = services.GetService<IRazorView>();
|
||||
Debug.Assert(_isPageExecutionFeatureInitialized, "IsInstrumentationEnabled must be called prior to this.");
|
||||
|
||||
view.Contextualize(page, partial, _pageExecutionListenerFeature);
|
||||
view.Contextualize(page, partial);
|
||||
return ViewEngineResult.Found(viewName, view);
|
||||
}
|
||||
|
||||
|
|
@ -200,16 +193,5 @@ namespace Microsoft.AspNet.Mvc.Razor
|
|||
{
|
||||
return name[0] == '~' || name[0] == '/';
|
||||
}
|
||||
|
||||
private bool IsInstrumentationEnabled(ActionContext context)
|
||||
{
|
||||
if (!_isPageExecutionFeatureInitialized)
|
||||
{
|
||||
_isPageExecutionFeatureInitialized = true;
|
||||
_pageExecutionListenerFeature = context.HttpContext.GetFeature<IPageExecutionListenerFeature>();
|
||||
}
|
||||
|
||||
return _pageExecutionListenerFeature != null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,10 +23,10 @@ namespace Microsoft.AspNet.Mvc.Razor
|
|||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public IEnumerable<IRazorPage> GetViewStartPages([NotNull] string path, bool enableInstrumentation)
|
||||
public IEnumerable<IRazorPage> GetViewStartPages([NotNull] string path)
|
||||
{
|
||||
var viewStartLocations = ViewStartUtility.GetViewStartLocations(_fileSystem, path);
|
||||
var viewStarts = viewStartLocations.Select(p => _pageFactory.CreateInstance(p, enableInstrumentation))
|
||||
var viewStarts = viewStartLocations.Select(_pageFactory.CreateInstance)
|
||||
.Where(p => p != null)
|
||||
.ToArray();
|
||||
|
||||
|
|
|
|||
|
|
@ -2,6 +2,8 @@
|
|||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||
|
||||
using System;
|
||||
using Microsoft.AspNet.Http;
|
||||
using Microsoft.AspNet.PageExecutionInstrumentation;
|
||||
using Microsoft.Framework.DependencyInjection;
|
||||
|
||||
namespace Microsoft.AspNet.Mvc.Razor
|
||||
|
|
@ -16,9 +18,22 @@ namespace Microsoft.AspNet.Mvc.Razor
|
|||
private readonly IServiceProvider _serviceProvider;
|
||||
private readonly IFileInfoCache _fileInfoCache;
|
||||
private readonly ICompilerCache _compilerCache;
|
||||
|
||||
private readonly bool _isInstrumentationEnabled;
|
||||
private IRazorCompilationService _razorcompilationService;
|
||||
|
||||
public VirtualPathRazorPageFactory(ITypeActivator typeActivator,
|
||||
IServiceProvider serviceProvider,
|
||||
ICompilerCache compilerCache,
|
||||
IFileInfoCache fileInfoCache,
|
||||
IContextAccessor<HttpContext> contextAccessor)
|
||||
{
|
||||
_activator = typeActivator;
|
||||
_serviceProvider = serviceProvider;
|
||||
_compilerCache = compilerCache;
|
||||
_fileInfoCache = fileInfoCache;
|
||||
_isInstrumentationEnabled = IsInstrumentationEnabled(contextAccessor.Value);
|
||||
}
|
||||
|
||||
private IRazorCompilationService RazorCompilationService
|
||||
{
|
||||
get
|
||||
|
|
@ -27,26 +42,15 @@ namespace Microsoft.AspNet.Mvc.Razor
|
|||
{
|
||||
// it is ok to use the cached service provider because this service has
|
||||
// a lifetime of Scoped.
|
||||
_razorcompilationService = _serviceProvider.GetService<IRazorCompilationService>();
|
||||
_razorcompilationService = _serviceProvider.GetService<IRazorCompilationService>();
|
||||
}
|
||||
|
||||
return _razorcompilationService;
|
||||
}
|
||||
}
|
||||
|
||||
public VirtualPathRazorPageFactory(ITypeActivator typeActivator,
|
||||
IServiceProvider serviceProvider,
|
||||
ICompilerCache compilerCache,
|
||||
IFileInfoCache fileInfoCache)
|
||||
{
|
||||
_activator = typeActivator;
|
||||
_serviceProvider = serviceProvider;
|
||||
_compilerCache = compilerCache;
|
||||
_fileInfoCache = fileInfoCache;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public IRazorPage CreateInstance([NotNull] string relativePath, bool enableInstrumentation)
|
||||
public IRazorPage CreateInstance([NotNull] string relativePath)
|
||||
{
|
||||
if (relativePath.StartsWith("~/", StringComparison.Ordinal))
|
||||
{
|
||||
|
|
@ -64,8 +68,10 @@ namespace Microsoft.AspNet.Mvc.Razor
|
|||
RelativePath = relativePath,
|
||||
};
|
||||
|
||||
var result = _compilerCache.GetOrAdd(relativeFileInfo, enableInstrumentation, () =>
|
||||
RazorCompilationService.Compile(relativeFileInfo, enableInstrumentation));
|
||||
var result = _compilerCache.GetOrAdd(
|
||||
relativeFileInfo,
|
||||
_isInstrumentationEnabled,
|
||||
() => RazorCompilationService.Compile(relativeFileInfo, _isInstrumentationEnabled));
|
||||
|
||||
var page = (IRazorPage)_activator.CreateInstance(_serviceProvider, result.CompiledType);
|
||||
page.Path = relativePath;
|
||||
|
|
@ -75,5 +81,10 @@ namespace Microsoft.AspNet.Mvc.Razor
|
|||
|
||||
return null;
|
||||
}
|
||||
|
||||
private static bool IsInstrumentationEnabled(HttpContext context)
|
||||
{
|
||||
return context.GetFeature<IPageExecutionListenerFeature>() != null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -59,7 +59,8 @@ namespace Microsoft.AspNet.Mvc
|
|||
// specific services.
|
||||
yield return describe.Transient<IViewEngineProvider, DefaultViewEngineProvider>();
|
||||
yield return describe.Scoped<ICompositeViewEngine, CompositeViewEngine>();
|
||||
yield return describe.Singleton<IViewStartProvider, ViewStartProvider>();
|
||||
// The ViewStartProvider needs to be able to consume scoped instances of IRazorPageFactory
|
||||
yield return describe.Scoped<IViewStartProvider, ViewStartProvider>();
|
||||
yield return describe.Transient<IRazorView, RazorView>();
|
||||
|
||||
// Transient since the IViewLocationExpanders returned by the instance is cached by view engines.
|
||||
|
|
|
|||
|
|
@ -183,7 +183,7 @@ namespace Microsoft.AspNet.Mvc.Razor.Test
|
|||
// Arrange
|
||||
var pageFactory = new Mock<IRazorPageFactory>();
|
||||
var page = Mock.Of<IRazorPage>();
|
||||
pageFactory.Setup(p => p.CreateInstance(It.IsAny<string>(), false))
|
||||
pageFactory.Setup(p => p.CreateInstance(It.IsAny<string>()))
|
||||
.Returns(Mock.Of<IRazorPage>());
|
||||
var viewEngine = CreateViewEngine(pageFactory.Object);
|
||||
var context = GetActionContext(_controllerTestContext);
|
||||
|
|
@ -203,7 +203,7 @@ namespace Microsoft.AspNet.Mvc.Razor.Test
|
|||
// Arrange
|
||||
var pageFactory = new Mock<IRazorPageFactory>();
|
||||
var page = Mock.Of<IRazorPage>();
|
||||
pageFactory.Setup(p => p.CreateInstance("fake-path1/bar/test-view.rzr", false))
|
||||
pageFactory.Setup(p => p.CreateInstance("fake-path1/bar/test-view.rzr"))
|
||||
.Returns(Mock.Of<IRazorPage>())
|
||||
.Verifiable();
|
||||
var viewEngine = new OverloadedLocationViewEngine(pageFactory.Object,
|
||||
|
|
@ -224,7 +224,7 @@ namespace Microsoft.AspNet.Mvc.Razor.Test
|
|||
// Arrange
|
||||
var pageFactory = new Mock<IRazorPageFactory>();
|
||||
var page = Mock.Of<IRazorPage>();
|
||||
pageFactory.Setup(p => p.CreateInstance("fake-area-path/foo/bar/test-view2.rzr", false))
|
||||
pageFactory.Setup(p => p.CreateInstance("fake-area-path/foo/bar/test-view2.rzr"))
|
||||
.Returns(Mock.Of<IRazorPage>())
|
||||
.Verifiable();
|
||||
var viewEngine = new OverloadedLocationViewEngine(pageFactory.Object,
|
||||
|
|
@ -273,7 +273,7 @@ namespace Microsoft.AspNet.Mvc.Razor.Test
|
|||
{
|
||||
// Arrange
|
||||
var pageFactory = new Mock<IRazorPageFactory>();
|
||||
pageFactory.Setup(p => p.CreateInstance("test-string/bar.cshtml", false))
|
||||
pageFactory.Setup(p => p.CreateInstance("test-string/bar.cshtml"))
|
||||
.Returns(Mock.Of<IRazorPage>())
|
||||
.Verifiable();
|
||||
var expander1Result = new[] { "some-seed" };
|
||||
|
|
@ -325,9 +325,9 @@ namespace Microsoft.AspNet.Mvc.Razor.Test
|
|||
{
|
||||
// Arrange
|
||||
var pageFactory = new Mock<IRazorPageFactory>();
|
||||
pageFactory.Setup(p => p.CreateInstance("/Views/bar/baz.cshtml", false))
|
||||
pageFactory.Setup(p => p.CreateInstance("/Views/bar/baz.cshtml"))
|
||||
.Verifiable();
|
||||
pageFactory.Setup(p => p.CreateInstance("/Views/Shared/baz.cshtml", false))
|
||||
pageFactory.Setup(p => p.CreateInstance("/Views/Shared/baz.cshtml"))
|
||||
.Returns(Mock.Of<IRazorPage>())
|
||||
.Verifiable();
|
||||
var cache = GetViewLocationCache();
|
||||
|
|
@ -353,7 +353,7 @@ namespace Microsoft.AspNet.Mvc.Razor.Test
|
|||
{
|
||||
// Arrange
|
||||
var pageFactory = new Mock<IRazorPageFactory>(MockBehavior.Strict);
|
||||
pageFactory.Setup(p => p.CreateInstance("some-view-location", false))
|
||||
pageFactory.Setup(p => p.CreateInstance("some-view-location"))
|
||||
.Returns(Mock.Of<IRazorPage>())
|
||||
.Verifiable();
|
||||
var expander = new Mock<IViewLocationExpander>(MockBehavior.Strict);
|
||||
|
|
@ -384,10 +384,10 @@ namespace Microsoft.AspNet.Mvc.Razor.Test
|
|||
{
|
||||
// Arrange
|
||||
var pageFactory = new Mock<IRazorPageFactory>();
|
||||
pageFactory.Setup(p => p.CreateInstance("expired-location", false))
|
||||
pageFactory.Setup(p => p.CreateInstance("expired-location"))
|
||||
.Returns((IRazorPage)null)
|
||||
.Verifiable();
|
||||
pageFactory.Setup(p => p.CreateInstance("some-view-location", false))
|
||||
pageFactory.Setup(p => p.CreateInstance("some-view-location"))
|
||||
.Returns(Mock.Of<IRazorPage>())
|
||||
.Verifiable();
|
||||
var cacheMock = new Mock<IViewLocationCache>();
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@ namespace Microsoft.AspNet.Mvc.Razor
|
|||
var view = new RazorView(Mock.Of<IRazorPageFactory>(),
|
||||
Mock.Of<IRazorPageActivator>(),
|
||||
CreateViewStartProvider());
|
||||
view.Contextualize(page, isPartial: true, pageExecutionListener: null);
|
||||
view.Contextualize(page, isPartial: true);
|
||||
var viewContext = CreateViewContext(view);
|
||||
var expected = viewContext.Writer;
|
||||
|
||||
|
|
@ -74,7 +74,7 @@ namespace Microsoft.AspNet.Mvc.Razor
|
|||
var view = new RazorView(Mock.Of<IRazorPageFactory>(),
|
||||
activator.Object,
|
||||
CreateViewStartProvider());
|
||||
view.Contextualize(page, isPartial: true, pageExecutionListener: null);
|
||||
view.Contextualize(page, isPartial: true);
|
||||
var viewContext = CreateViewContext(view);
|
||||
var expectedWriter = viewContext.Writer;
|
||||
activator.Setup(a => a.Activate(page, It.IsAny<ViewContext>()))
|
||||
|
|
@ -104,7 +104,7 @@ namespace Microsoft.AspNet.Mvc.Razor
|
|||
var view = new RazorView(Mock.Of<IRazorPageFactory>(),
|
||||
activator.Object,
|
||||
CreateViewStartProvider());
|
||||
view.Contextualize(page, isPartial: true, pageExecutionListener: null);
|
||||
view.Contextualize(page, isPartial: true);
|
||||
var viewContext = CreateViewContext(view);
|
||||
|
||||
// Act
|
||||
|
|
@ -126,16 +126,16 @@ namespace Microsoft.AspNet.Mvc.Razor
|
|||
var view = new RazorView(pageFactory.Object,
|
||||
Mock.Of<IRazorPageActivator>(),
|
||||
viewStartProvider);
|
||||
view.Contextualize(page, isPartial: true, pageExecutionListener: null);
|
||||
view.Contextualize(page, isPartial: true);
|
||||
var viewContext = CreateViewContext(view);
|
||||
|
||||
// Act
|
||||
await view.RenderAsync(viewContext);
|
||||
|
||||
// Assert
|
||||
pageFactory.Verify(v => v.CreateInstance(It.IsAny<string>(), It.IsAny<bool>()), Times.Never());
|
||||
pageFactory.Verify(v => v.CreateInstance(It.IsAny<string>()), Times.Never());
|
||||
Mock.Get(viewStartProvider)
|
||||
.Verify(v => v.GetViewStartPages(It.IsAny<string>(), It.IsAny<bool>()), Times.Never());
|
||||
.Verify(v => v.GetViewStartPages(It.IsAny<string>()), Times.Never());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -150,7 +150,7 @@ namespace Microsoft.AspNet.Mvc.Razor
|
|||
var view = new RazorView(Mock.Of<IRazorPageFactory>(),
|
||||
Mock.Of<IRazorPageActivator>(),
|
||||
CreateViewStartProvider());
|
||||
view.Contextualize(page, isPartial: false, pageExecutionListener: null);
|
||||
view.Contextualize(page, isPartial: false);
|
||||
var viewContext = CreateViewContext(view);
|
||||
var original = viewContext.Writer;
|
||||
|
||||
|
|
@ -173,7 +173,7 @@ namespace Microsoft.AspNet.Mvc.Razor
|
|||
var view = new RazorView(Mock.Of<IRazorPageFactory>(),
|
||||
Mock.Of<IRazorPageActivator>(),
|
||||
CreateViewStartProvider());
|
||||
view.Contextualize(page, isPartial: false, pageExecutionListener: null);
|
||||
view.Contextualize(page, isPartial: false);
|
||||
var viewContext = CreateViewContext(view);
|
||||
var original = viewContext.Writer;
|
||||
|
||||
|
|
@ -198,7 +198,7 @@ namespace Microsoft.AspNet.Mvc.Razor
|
|||
var view = new RazorView(Mock.Of<IRazorPageFactory>(),
|
||||
activator.Object,
|
||||
CreateViewStartProvider());
|
||||
view.Contextualize(page, isPartial: false, pageExecutionListener: null);
|
||||
view.Contextualize(page, isPartial: false);
|
||||
|
||||
var viewContext = CreateViewContext(view);
|
||||
|
||||
|
|
@ -240,7 +240,7 @@ namespace Microsoft.AspNet.Mvc.Razor
|
|||
var view = new RazorView(Mock.Of<IRazorPageFactory>(),
|
||||
activator.Object,
|
||||
CreateViewStartProvider(viewStart1, viewStart2));
|
||||
view.Contextualize(page, isPartial: false, pageExecutionListener: null);
|
||||
view.Contextualize(page, isPartial: false);
|
||||
var viewContext = CreateViewContext(view);
|
||||
|
||||
// Act
|
||||
|
|
@ -288,13 +288,13 @@ foot-content";
|
|||
activator.Setup(a => a.Activate(layout, It.IsAny<ViewContext>()))
|
||||
.Verifiable();
|
||||
var pageFactory = new Mock<IRazorPageFactory>();
|
||||
pageFactory.Setup(p => p.CreateInstance(LayoutPath, false))
|
||||
pageFactory.Setup(p => p.CreateInstance(LayoutPath))
|
||||
.Returns(layout);
|
||||
|
||||
var view = new RazorView(pageFactory.Object,
|
||||
activator.Object,
|
||||
CreateViewStartProvider());
|
||||
view.Contextualize(page, isPartial: false, pageExecutionListener: null);
|
||||
view.Contextualize(page, isPartial: false);
|
||||
var viewContext = CreateViewContext(view);
|
||||
|
||||
// Act
|
||||
|
|
@ -321,13 +321,13 @@ foot-content";
|
|||
v.RenderBodyPublic();
|
||||
});
|
||||
var pageFactory = new Mock<IRazorPageFactory>();
|
||||
pageFactory.Setup(p => p.CreateInstance(LayoutPath, false))
|
||||
pageFactory.Setup(p => p.CreateInstance(LayoutPath))
|
||||
.Returns(layout);
|
||||
|
||||
var view = new RazorView(pageFactory.Object,
|
||||
Mock.Of<IRazorPageActivator>(),
|
||||
CreateViewStartProvider());
|
||||
view.Contextualize(page, isPartial: false, pageExecutionListener: null);
|
||||
view.Contextualize(page, isPartial: false);
|
||||
var viewContext = CreateViewContext(view);
|
||||
|
||||
// Act and Assert
|
||||
|
|
@ -347,13 +347,13 @@ foot-content";
|
|||
{
|
||||
});
|
||||
var pageFactory = new Mock<IRazorPageFactory>();
|
||||
pageFactory.Setup(p => p.CreateInstance(LayoutPath, false))
|
||||
pageFactory.Setup(p => p.CreateInstance(LayoutPath))
|
||||
.Returns(layout);
|
||||
|
||||
var view = new RazorView(pageFactory.Object,
|
||||
Mock.Of<IRazorPageActivator>(),
|
||||
CreateViewStartProvider());
|
||||
view.Contextualize(page, isPartial: false, pageExecutionListener: null);
|
||||
view.Contextualize(page, isPartial: false);
|
||||
var viewContext = CreateViewContext(view);
|
||||
|
||||
// Act and Assert
|
||||
|
|
@ -399,15 +399,15 @@ body-content";
|
|||
v.RenderBodyPublic();
|
||||
});
|
||||
var pageFactory = new Mock<IRazorPageFactory>();
|
||||
pageFactory.Setup(p => p.CreateInstance("~/Shared/Layout1.cshtml", false))
|
||||
pageFactory.Setup(p => p.CreateInstance("~/Shared/Layout1.cshtml"))
|
||||
.Returns(layout1);
|
||||
pageFactory.Setup(p => p.CreateInstance("~/Shared/Layout2.cshtml", false))
|
||||
pageFactory.Setup(p => p.CreateInstance("~/Shared/Layout2.cshtml"))
|
||||
.Returns(layout2);
|
||||
|
||||
var view = new RazorView(pageFactory.Object,
|
||||
Mock.Of<IRazorPageActivator>(),
|
||||
CreateViewStartProvider());
|
||||
view.Contextualize(page, isPartial: false, pageExecutionListener: null);
|
||||
view.Contextualize(page, isPartial: false);
|
||||
var viewContext = CreateViewContext(view);
|
||||
|
||||
// Act
|
||||
|
|
@ -447,13 +447,13 @@ section-content-2";
|
|||
});
|
||||
|
||||
var pageFactory = new Mock<IRazorPageFactory>();
|
||||
pageFactory.Setup(p => p.CreateInstance("layout-1", false))
|
||||
pageFactory.Setup(p => p.CreateInstance("layout-1"))
|
||||
.Returns(layout1);
|
||||
|
||||
var view = new RazorView(pageFactory.Object,
|
||||
Mock.Of<IRazorPageActivator>(),
|
||||
CreateViewStartProvider());
|
||||
view.Contextualize(page, isPartial: false, pageExecutionListener: null);
|
||||
view.Contextualize(page, isPartial: false);
|
||||
var viewContext = CreateViewContext(view);
|
||||
|
||||
// Act
|
||||
|
|
@ -491,13 +491,13 @@ section-content-2";
|
|||
});
|
||||
|
||||
var pageFactory = new Mock<IRazorPageFactory>();
|
||||
pageFactory.Setup(p => p.CreateInstance("layout-1", false))
|
||||
pageFactory.Setup(p => p.CreateInstance("layout-1"))
|
||||
.Returns(layout1);
|
||||
|
||||
var view = new RazorView(pageFactory.Object,
|
||||
Mock.Of<IRazorPageActivator>(),
|
||||
CreateViewStartProvider());
|
||||
view.Contextualize(page, isPartial: false, pageExecutionListener: null);
|
||||
view.Contextualize(page, isPartial: false);
|
||||
var viewContext = CreateViewContext(view);
|
||||
|
||||
// Act
|
||||
|
|
@ -523,7 +523,7 @@ section-content-2";
|
|||
var view = new RazorView(Mock.Of<IRazorPageFactory>(),
|
||||
Mock.Of<IRazorPageActivator>(),
|
||||
CreateViewStartProvider());
|
||||
view.Contextualize(page, isPartial: false, pageExecutionListener: null);
|
||||
view.Contextualize(page, isPartial: false);
|
||||
var viewContext = CreateViewContext(view);
|
||||
|
||||
// Act and Assert
|
||||
|
|
@ -558,13 +558,13 @@ section-content-2";
|
|||
v.Layout = "~/Shared/Layout2.cshtml";
|
||||
});
|
||||
var pageFactory = new Mock<IRazorPageFactory>();
|
||||
pageFactory.Setup(p => p.CreateInstance("~/Shared/Layout1.cshtml", false))
|
||||
pageFactory.Setup(p => p.CreateInstance("~/Shared/Layout1.cshtml"))
|
||||
.Returns(layout1);
|
||||
|
||||
var view = new RazorView(pageFactory.Object,
|
||||
Mock.Of<IRazorPageActivator>(),
|
||||
CreateViewStartProvider());
|
||||
view.Contextualize(page, isPartial: false, pageExecutionListener: null);
|
||||
view.Contextualize(page, isPartial: false);
|
||||
var viewContext = CreateViewContext(view);
|
||||
|
||||
// Act and Assert
|
||||
|
|
@ -627,17 +627,18 @@ section-content-2";
|
|||
layout.Path = "/Layout.cshtml";
|
||||
|
||||
var pageFactory = new Mock<IRazorPageFactory>();
|
||||
pageFactory.Setup(p => p.CreateInstance("/Layout.cshtml", true))
|
||||
pageFactory.Setup(p => p.CreateInstance("/Layout.cshtml"))
|
||||
.Returns(layout);
|
||||
var viewStartProvider = new Mock<IViewStartProvider>();
|
||||
viewStartProvider.Setup(v => v.GetViewStartPages(It.IsAny<string>(), true))
|
||||
viewStartProvider.Setup(v => v.GetViewStartPages(It.IsAny<string>()))
|
||||
.Returns(Enumerable.Empty<IRazorPage>())
|
||||
.Verifiable();
|
||||
var view = new RazorView(pageFactory.Object,
|
||||
Mock.Of<IRazorPageActivator>(),
|
||||
viewStartProvider.Object);
|
||||
view.Contextualize(page, isPartial: false, pageExecutionListener: feature.Object);
|
||||
view.Contextualize(page, isPartial: false);
|
||||
var viewContext = CreateViewContext(view);
|
||||
viewContext.HttpContext.SetFeature<IPageExecutionListenerFeature>(feature.Object);
|
||||
|
||||
// Act
|
||||
await view.RenderAsync(viewContext);
|
||||
|
|
@ -672,9 +673,10 @@ section-content-2";
|
|||
var view = new RazorView(Mock.Of<IRazorPageFactory>(),
|
||||
Mock.Of<IRazorPageActivator>(),
|
||||
Mock.Of<IViewStartProvider>());
|
||||
view.Contextualize(page, isPartial: true, pageExecutionListener: feature.Object);
|
||||
view.Contextualize(page, isPartial: true);
|
||||
var viewContext = CreateViewContext(view);
|
||||
viewContext.Writer = writer;
|
||||
viewContext.HttpContext.SetFeature<IPageExecutionListenerFeature>(feature.Object);
|
||||
|
||||
// Act
|
||||
await view.RenderAsync(viewContext);
|
||||
|
|
@ -700,7 +702,7 @@ section-content-2";
|
|||
var view = new RazorView(Mock.Of<IRazorPageFactory>(),
|
||||
Mock.Of<IRazorPageActivator>(),
|
||||
Mock.Of<IViewStartProvider>());
|
||||
view.Contextualize(page, isPartial, pageExecutionListener: null);
|
||||
view.Contextualize(page, isPartial);
|
||||
var viewContext = CreateViewContext(view);
|
||||
|
||||
// Act
|
||||
|
|
@ -734,7 +736,7 @@ section-content-2";
|
|||
{
|
||||
viewStartPages = viewStartPages ?? new IRazorPage[0];
|
||||
var viewStartProvider = new Mock<IViewStartProvider>();
|
||||
viewStartProvider.Setup(v => v.GetViewStartPages(It.IsAny<string>(), false))
|
||||
viewStartProvider.Setup(v => v.GetViewStartPages(It.IsAny<string>()))
|
||||
.Returns(viewStartPages);
|
||||
|
||||
return viewStartProvider.Object;
|
||||
|
|
|
|||
Loading…
Reference in New Issue