Cleanup unused precompilation code
This commit is contained in:
parent
b1b7252ddc
commit
6961cf9211
|
|
@ -1,43 +0,0 @@
|
||||||
// Copyright (c) .NET Foundation. All rights reserved.
|
|
||||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
|
||||||
|
|
||||||
using System.IO;
|
|
||||||
using System.Reflection;
|
|
||||||
using Microsoft.AspNetCore.Mvc.ApplicationParts;
|
|
||||||
|
|
||||||
namespace Microsoft.AspNetCore.Mvc.Razor.Compilation
|
|
||||||
{
|
|
||||||
public static class CompiledViewManfiest
|
|
||||||
{
|
|
||||||
public static readonly string PrecompiledViewsAssemblySuffix = ".PrecompiledViews";
|
|
||||||
|
|
||||||
public static Assembly GetFeatureAssembly(AssemblyPart assemblyPart)
|
|
||||||
{
|
|
||||||
if (assemblyPart.Assembly.IsDynamic || string.IsNullOrEmpty(assemblyPart.Assembly.Location))
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
var precompiledAssemblyFileName = assemblyPart.Assembly.GetName().Name
|
|
||||||
+ PrecompiledViewsAssemblySuffix
|
|
||||||
+ ".dll";
|
|
||||||
var precompiledAssemblyFilePath = Path.Combine(
|
|
||||||
Path.GetDirectoryName(assemblyPart.Assembly.Location),
|
|
||||||
precompiledAssemblyFileName);
|
|
||||||
|
|
||||||
if (File.Exists(precompiledAssemblyFilePath))
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
return Assembly.LoadFile(precompiledAssemblyFilePath);
|
|
||||||
}
|
|
||||||
catch (FileLoadException)
|
|
||||||
{
|
|
||||||
// Don't throw if assembly cannot be loaded. This can happen if the file is not a managed assembly.
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,34 +0,0 @@
|
||||||
// Copyright (c) .NET Foundation. All rights reserved.
|
|
||||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
|
||||||
|
|
||||||
using System;
|
|
||||||
|
|
||||||
namespace Microsoft.AspNetCore.Mvc.ApplicationParts
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Provides information for precompiled views.
|
|
||||||
/// </summary>
|
|
||||||
public class ViewInfo
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Creates a new instance of <see cref="ViewInfo" />.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="path">The path of the view.</param>
|
|
||||||
/// <param name="type">The view <see cref="System.Type"/>.</param>
|
|
||||||
public ViewInfo(string path, Type type)
|
|
||||||
{
|
|
||||||
Path = path;
|
|
||||||
Type = type;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The path of the view.
|
|
||||||
/// </summary>
|
|
||||||
public string Path { get; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The view <see cref="System.Type"/>.
|
|
||||||
/// </summary>
|
|
||||||
public Type Type { get; }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,27 +0,0 @@
|
||||||
// Copyright (c) .NET Foundation. All rights reserved.
|
|
||||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
|
||||||
|
|
||||||
using System.Collections.Generic;
|
|
||||||
|
|
||||||
namespace Microsoft.AspNetCore.Mvc.ApplicationParts
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// A container for <see cref="ViewInfo"/> instances.
|
|
||||||
/// </summary>
|
|
||||||
public class ViewInfoContainer
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Initializes a new instance of <see cref="ViewInfos"/>.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="views">The sequence of <see cref="ViewInfo"/>.</param>
|
|
||||||
public ViewInfoContainer(IReadOnlyList<ViewInfo> views)
|
|
||||||
{
|
|
||||||
ViewInfos = views;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The <see cref="IReadOnlyList{T}"/> of <see cref="ViewInfo"/>.
|
|
||||||
/// </summary>
|
|
||||||
public IReadOnlyList<ViewInfo> ViewInfos { get; }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -3,6 +3,7 @@
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using Microsoft.AspNetCore.Mvc.ApplicationParts;
|
using Microsoft.AspNetCore.Mvc.ApplicationParts;
|
||||||
|
|
@ -18,18 +19,6 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Compilation
|
||||||
{
|
{
|
||||||
public static readonly string PrecompiledViewsAssemblySuffix = ".PrecompiledViews";
|
public static readonly string PrecompiledViewsAssemblySuffix = ".PrecompiledViews";
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the namespace for the <see cref="ViewInfoContainer"/> type in the view assembly.
|
|
||||||
/// </summary>
|
|
||||||
public static readonly string ViewInfoContainerNamespace = "AspNetCore";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the type name for the view collection type in the view assembly.
|
|
||||||
/// </summary>
|
|
||||||
public static readonly string ViewInfoContainerTypeName = "__PrecompiledViewCollection";
|
|
||||||
|
|
||||||
private static readonly string FullyQualifiedManifestTypeName = ViewInfoContainerNamespace + "." + ViewInfoContainerTypeName;
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public void PopulateFeature(IEnumerable<ApplicationPart> parts, ViewsFeature feature)
|
public void PopulateFeature(IEnumerable<ApplicationPart> parts, ViewsFeature feature)
|
||||||
{
|
{
|
||||||
|
|
@ -64,7 +53,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Compilation
|
||||||
throw new ArgumentNullException(nameof(assemblyPart));
|
throw new ArgumentNullException(nameof(assemblyPart));
|
||||||
}
|
}
|
||||||
|
|
||||||
var featureAssembly = CompiledViewManfiest.GetFeatureAssembly(assemblyPart);
|
var featureAssembly = GetFeatureAssembly(assemblyPart);
|
||||||
if (featureAssembly != null)
|
if (featureAssembly != null)
|
||||||
{
|
{
|
||||||
return featureAssembly.GetCustomAttributes<RazorViewAttribute>();
|
return featureAssembly.GetCustomAttributes<RazorViewAttribute>();
|
||||||
|
|
@ -72,5 +61,34 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Compilation
|
||||||
|
|
||||||
return Enumerable.Empty<RazorViewAttribute>();
|
return Enumerable.Empty<RazorViewAttribute>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static Assembly GetFeatureAssembly(AssemblyPart assemblyPart)
|
||||||
|
{
|
||||||
|
if (assemblyPart.Assembly.IsDynamic || string.IsNullOrEmpty(assemblyPart.Assembly.Location))
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
var precompiledAssemblyFileName = assemblyPart.Assembly.GetName().Name
|
||||||
|
+ PrecompiledViewsAssemblySuffix
|
||||||
|
+ ".dll";
|
||||||
|
var precompiledAssemblyFilePath = Path.Combine(
|
||||||
|
Path.GetDirectoryName(assemblyPart.Assembly.Location),
|
||||||
|
precompiledAssemblyFileName);
|
||||||
|
|
||||||
|
if (File.Exists(precompiledAssemblyFilePath))
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return Assembly.LoadFile(precompiledAssemblyFilePath);
|
||||||
|
}
|
||||||
|
catch (FileLoadException)
|
||||||
|
{
|
||||||
|
// Don't throw if assembly cannot be loaded. This can happen if the file is not a managed assembly.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,26 +0,0 @@
|
||||||
// Copyright (c) .NET Foundation. All rights reserved.
|
|
||||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
|
||||||
|
|
||||||
using Microsoft.AspNetCore.Mvc.Razor.Compilation;
|
|
||||||
|
|
||||||
namespace Microsoft.AspNetCore.Mvc.ApplicationParts
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// An <see cref="IApplicationFeatureProvider{TFeature}"/> for <see cref="ViewsFeature"/>.
|
|
||||||
/// </summary>
|
|
||||||
public class CompiledPageFeatureProvider
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the namespace for the <see cref="ViewInfoContainer"/> type in the view assembly.
|
|
||||||
/// </summary>
|
|
||||||
public static readonly string CompiledPageManifestNamespace = "AspNetCore";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the type name for the view collection type in the view assembly.
|
|
||||||
/// </summary>
|
|
||||||
public static readonly string CompiledPageManifestTypeName = "__CompiledRazorPagesManifest";
|
|
||||||
|
|
||||||
private static readonly string FullyQualifiedManifestTypeName =
|
|
||||||
CompiledPageManifestNamespace + "." + CompiledPageManifestTypeName;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,23 +0,0 @@
|
||||||
// Copyright (c) .NET Foundation. All rights reserved.
|
|
||||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
|
||||||
|
|
||||||
using System;
|
|
||||||
|
|
||||||
namespace Microsoft.AspNetCore.Mvc.ApplicationParts
|
|
||||||
{
|
|
||||||
public class CompiledPageInfo
|
|
||||||
{
|
|
||||||
public CompiledPageInfo(string path, Type compiledType, string routePrefix)
|
|
||||||
{
|
|
||||||
Path = path;
|
|
||||||
CompiledType = compiledType;
|
|
||||||
RoutePrefix = routePrefix;
|
|
||||||
}
|
|
||||||
|
|
||||||
public string Path { get; }
|
|
||||||
|
|
||||||
public string RoutePrefix { get; }
|
|
||||||
|
|
||||||
public Type CompiledType { get; }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,25 +0,0 @@
|
||||||
// Copyright (c) .NET Foundation. All rights reserved.
|
|
||||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
|
||||||
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using Microsoft.AspNetCore.Mvc.ApplicationParts;
|
|
||||||
|
|
||||||
namespace Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure
|
|
||||||
{
|
|
||||||
public abstract class CompiledPageManifest
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Initializes a new instance of <see cref="CompiledPageManifest"/>.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="pages">The sequence of <see cref="CompiledPageInfo"/>.</param>
|
|
||||||
public CompiledPageManifest(IReadOnlyList<CompiledPageInfo> pages)
|
|
||||||
{
|
|
||||||
CompiledPages = pages;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The <see cref="IReadOnlyList{T}"/> of <see cref="CompiledPageInfo"/>.
|
|
||||||
/// </summary>
|
|
||||||
public IReadOnlyList<CompiledPageInfo> CompiledPages { get; }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -4,11 +4,9 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Reflection;
|
|
||||||
using Microsoft.AspNetCore.Mvc.ApplicationModels;
|
using Microsoft.AspNetCore.Mvc.ApplicationModels;
|
||||||
using Microsoft.AspNetCore.Mvc.ApplicationParts;
|
using Microsoft.AspNetCore.Mvc.ApplicationParts;
|
||||||
using Microsoft.AspNetCore.Mvc.Razor.Compilation;
|
using Microsoft.AspNetCore.Mvc.Razor.Compilation;
|
||||||
using Microsoft.AspNetCore.Mvc.Razor.Internal;
|
|
||||||
using Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure;
|
using Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure;
|
||||||
using Microsoft.Extensions.Options;
|
using Microsoft.Extensions.Options;
|
||||||
|
|
||||||
|
|
@ -61,16 +59,16 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Internal
|
||||||
}
|
}
|
||||||
|
|
||||||
var cachedApplicationModels = new List<PageApplicationModel>();
|
var cachedApplicationModels = new List<PageApplicationModel>();
|
||||||
foreach (var pageAttribute in GetRazorPageAttributes(_applicationManager.ApplicationParts))
|
foreach (var viewDescriptor in GetViewDescriptors(_applicationManager))
|
||||||
{
|
{
|
||||||
var normalizedPath = ViewPath.NormalizePath(pageAttribute.Path);
|
if (!viewDescriptor.RelativePath.StartsWith(rootDirectory, StringComparison.OrdinalIgnoreCase))
|
||||||
if (!normalizedPath.StartsWith(rootDirectory, StringComparison.OrdinalIgnoreCase))
|
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
var viewEnginePath = GetViewEnginePath(rootDirectory, normalizedPath);
|
var viewEnginePath = GetViewEnginePath(rootDirectory, viewDescriptor.RelativePath);
|
||||||
var model = new PageApplicationModel(normalizedPath, viewEnginePath);
|
var model = new PageApplicationModel(viewDescriptor.RelativePath, viewEnginePath);
|
||||||
|
var pageAttribute = (RazorPageAttribute)viewDescriptor.ViewAttribute;
|
||||||
PageSelectorModel.PopulateDefaults(model, pageAttribute.RouteTemplate);
|
PageSelectorModel.PopulateDefaults(model, pageAttribute.RouteTemplate);
|
||||||
|
|
||||||
cachedApplicationModels.Add(model);
|
cachedApplicationModels.Add(model);
|
||||||
|
|
@ -81,31 +79,21 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Internal
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the sequence of <see cref="CompiledViewDescriptor"/> from <paramref name="parts"/>.
|
/// Gets the sequence of <see cref="CompiledViewDescriptor"/> from <paramref name="applicationManager"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="parts">The <see cref="ApplicationPart"/>s</param>
|
/// <param name="applicationManager">The <see cref="ApplicationPartManager"/>s</param>
|
||||||
/// <returns>The sequence of <see cref="CompiledViewDescriptor"/>.</returns>
|
/// <returns>The sequence of <see cref="CompiledViewDescriptor"/>.</returns>
|
||||||
protected virtual IEnumerable<RazorPageAttribute> GetRazorPageAttributes(IEnumerable<ApplicationPart> parts)
|
protected virtual IEnumerable<CompiledViewDescriptor> GetViewDescriptors(ApplicationPartManager applicationManager)
|
||||||
{
|
{
|
||||||
if (parts == null)
|
if (applicationManager == null)
|
||||||
{
|
{
|
||||||
throw new ArgumentNullException(nameof(parts));
|
throw new ArgumentNullException(nameof(applicationManager));
|
||||||
}
|
}
|
||||||
|
|
||||||
return _applicationManager.ApplicationParts
|
var viewsFeature = new ViewsFeature();
|
||||||
.OfType<AssemblyPart>()
|
applicationManager.PopulateFeature(viewsFeature);
|
||||||
.SelectMany(GetAttributes);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static IEnumerable<RazorPageAttribute> GetAttributes(AssemblyPart assemblyPart)
|
return viewsFeature.ViewDescriptors.Where(d => d.IsPrecompiled && d.ViewAttribute is RazorPageAttribute);
|
||||||
{
|
|
||||||
var featureAssembly = CompiledViewManfiest.GetFeatureAssembly(assemblyPart);
|
|
||||||
if (featureAssembly != null)
|
|
||||||
{
|
|
||||||
return featureAssembly.GetCustomAttributes<RazorPageAttribute>();
|
|
||||||
}
|
|
||||||
|
|
||||||
return Enumerable.Empty<RazorPageAttribute>();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private string GetViewEnginePath(string rootDirectory, string path)
|
private string GetViewEnginePath(string rootDirectory, string path)
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using Microsoft.AspNetCore.Mvc.ApplicationModels;
|
using Microsoft.AspNetCore.Mvc.ApplicationModels;
|
||||||
using Microsoft.AspNetCore.Mvc.ApplicationParts;
|
using Microsoft.AspNetCore.Mvc.ApplicationParts;
|
||||||
|
using Microsoft.AspNetCore.Mvc.Razor.Compilation;
|
||||||
using Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure;
|
using Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
|
|
@ -18,8 +19,8 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Internal
|
||||||
// Arrange
|
// Arrange
|
||||||
var descriptors = new[]
|
var descriptors = new[]
|
||||||
{
|
{
|
||||||
GetAttribute("/Pages/About.cshtml"),
|
GetDescriptor("/Pages/About.cshtml"),
|
||||||
GetAttribute("/Pages/Home.cshtml", "some-prefix"),
|
GetDescriptor("/Pages/Home.cshtml", "some-prefix"),
|
||||||
};
|
};
|
||||||
var provider = new TestCompiledPageApplicationModelProvider(descriptors, new RazorPagesOptions());
|
var provider = new TestCompiledPageApplicationModelProvider(descriptors, new RazorPagesOptions());
|
||||||
var context = new PageApplicationModelProviderContext();
|
var context = new PageApplicationModelProviderContext();
|
||||||
|
|
@ -51,8 +52,8 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Internal
|
||||||
// Arrange
|
// Arrange
|
||||||
var descriptors = new[]
|
var descriptors = new[]
|
||||||
{
|
{
|
||||||
GetAttribute("/Pages/Index.cshtml"),
|
GetDescriptor("/Pages/Index.cshtml"),
|
||||||
GetAttribute("/Pages/Admin/Index.cshtml", "some-template"),
|
GetDescriptor("/Pages/Admin/Index.cshtml", "some-template"),
|
||||||
};
|
};
|
||||||
var provider = new TestCompiledPageApplicationModelProvider(descriptors, new RazorPagesOptions { RootDirectory = "/" });
|
var provider = new TestCompiledPageApplicationModelProvider(descriptors, new RazorPagesOptions { RootDirectory = "/" });
|
||||||
var context = new PageApplicationModelProviderContext();
|
var context = new PageApplicationModelProviderContext();
|
||||||
|
|
@ -86,8 +87,8 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Internal
|
||||||
// Arrange
|
// Arrange
|
||||||
var descriptors = new[]
|
var descriptors = new[]
|
||||||
{
|
{
|
||||||
GetAttribute("/Pages/Index.cshtml"),
|
GetDescriptor("/Pages/Index.cshtml"),
|
||||||
GetAttribute("/Pages/Admin/Index.cshtml", "some-template"),
|
GetDescriptor("/Pages/Admin/Index.cshtml", "some-template"),
|
||||||
};
|
};
|
||||||
var provider = new TestCompiledPageApplicationModelProvider(descriptors, new RazorPagesOptions());
|
var provider = new TestCompiledPageApplicationModelProvider(descriptors, new RazorPagesOptions());
|
||||||
var context = new PageApplicationModelProviderContext();
|
var context = new PageApplicationModelProviderContext();
|
||||||
|
|
@ -121,8 +122,8 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Internal
|
||||||
// Arrange
|
// Arrange
|
||||||
var descriptors = new[]
|
var descriptors = new[]
|
||||||
{
|
{
|
||||||
GetAttribute("/Pages/Index.cshtml"),
|
GetDescriptor("/Pages/Index.cshtml"),
|
||||||
GetAttribute("/Pages/Home.cshtml", "/some-prefix"),
|
GetDescriptor("/Pages/Home.cshtml", "/some-prefix"),
|
||||||
};
|
};
|
||||||
var provider = new TestCompiledPageApplicationModelProvider(descriptors, new RazorPagesOptions());
|
var provider = new TestCompiledPageApplicationModelProvider(descriptors, new RazorPagesOptions());
|
||||||
var context = new PageApplicationModelProviderContext();
|
var context = new PageApplicationModelProviderContext();
|
||||||
|
|
@ -133,19 +134,26 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Internal
|
||||||
ex.Message);
|
ex.Message);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static RazorPageAttribute GetAttribute(string path, string prefix = "") => new RazorPageAttribute(path, typeof(object), prefix);
|
private static CompiledViewDescriptor GetDescriptor(string path, string prefix = "")
|
||||||
|
{
|
||||||
|
return new CompiledViewDescriptor
|
||||||
|
{
|
||||||
|
RelativePath = path,
|
||||||
|
ViewAttribute = new RazorPageAttribute(path, typeof(object), prefix),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
public class TestCompiledPageApplicationModelProvider : CompiledPageApplicationModelProvider
|
public class TestCompiledPageApplicationModelProvider : CompiledPageApplicationModelProvider
|
||||||
{
|
{
|
||||||
private readonly IEnumerable<RazorPageAttribute> _attributes;
|
private readonly IEnumerable<CompiledViewDescriptor> _descriptors;
|
||||||
|
|
||||||
public TestCompiledPageApplicationModelProvider(IEnumerable<RazorPageAttribute> attributes, RazorPagesOptions options)
|
public TestCompiledPageApplicationModelProvider(IEnumerable<CompiledViewDescriptor> descriptors, RazorPagesOptions options)
|
||||||
: base(new ApplicationPartManager(), new TestOptionsManager<RazorPagesOptions>(options))
|
: base(new ApplicationPartManager(), new TestOptionsManager<RazorPagesOptions>(options))
|
||||||
{
|
{
|
||||||
_attributes = attributes;
|
_descriptors = descriptors;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override IEnumerable<RazorPageAttribute> GetRazorPageAttributes(IEnumerable<ApplicationPart> parts) => _attributes;
|
protected override IEnumerable<CompiledViewDescriptor> GetViewDescriptors(ApplicationPartManager applicationManager) => _descriptors;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue