Remove instrumentation from public API surface

Fixes #1262
This commit is contained in:
Pranav K 2014-10-08 19:50:40 -07:00
parent 75084ba0cd
commit 20eadb94ee
11 changed files with 89 additions and 98 deletions

View File

@ -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);
}
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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);

View File

@ -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;
}
}
}

View File

@ -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();

View File

@ -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;
}
}
}

View File

@ -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.

View File

@ -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>();

View File

@ -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;