[Perf] RazorPage.CreateModelExpression is allocating expression names
Fixes #4469
This commit is contained in:
parent
4b4d67e48e
commit
f1fe5e26fc
|
|
@ -18,5 +18,15 @@ namespace Microsoft.AspNetCore.Mvc.Razor
|
||||||
/// Name the method to create <c>ModelExpression</c>s.
|
/// Name the method to create <c>ModelExpression</c>s.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string CreateModelExpressionMethodName { get; set; }
|
public string CreateModelExpressionMethodName { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the name of the <c>IModelExpressionProvider</c>.
|
||||||
|
/// </summary>
|
||||||
|
public string ModelExpressionProviderPropertyName { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the property name of the <c>ViewDataDictionary</c>.
|
||||||
|
/// </summary>
|
||||||
|
public string ViewDataPropertyName { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -24,6 +24,8 @@ namespace Microsoft.AspNetCore.Mvc.Razor
|
||||||
{
|
{
|
||||||
private const string BaseType = "Microsoft.AspNetCore.Mvc.Razor.RazorPage";
|
private const string BaseType = "Microsoft.AspNetCore.Mvc.Razor.RazorPage";
|
||||||
private const string HtmlHelperPropertyName = "Html";
|
private const string HtmlHelperPropertyName = "Html";
|
||||||
|
private const string ModelExpressionProviderProperty = "ModelExpressionProvider";
|
||||||
|
private const string ViewDataProperty = "ViewData";
|
||||||
|
|
||||||
private static readonly string[] _defaultNamespaces = new[]
|
private static readonly string[] _defaultNamespaces = new[]
|
||||||
{
|
{
|
||||||
|
|
@ -32,6 +34,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor
|
||||||
"System.Collections.Generic",
|
"System.Collections.Generic",
|
||||||
"Microsoft.AspNetCore.Mvc",
|
"Microsoft.AspNetCore.Mvc",
|
||||||
"Microsoft.AspNetCore.Mvc.Rendering",
|
"Microsoft.AspNetCore.Mvc.Rendering",
|
||||||
|
"Microsoft.AspNetCore.Mvc.ViewFeatures",
|
||||||
};
|
};
|
||||||
private static readonly Chunk[] _defaultInheritedChunks = new Chunk[]
|
private static readonly Chunk[] _defaultInheritedChunks = new Chunk[]
|
||||||
{
|
{
|
||||||
|
|
@ -39,6 +42,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor
|
||||||
new InjectChunk("Microsoft.AspNetCore.Mvc.Rendering.IJsonHelper", "Json"),
|
new InjectChunk("Microsoft.AspNetCore.Mvc.Rendering.IJsonHelper", "Json"),
|
||||||
new InjectChunk("Microsoft.AspNetCore.Mvc.IViewComponentHelper", "Component"),
|
new InjectChunk("Microsoft.AspNetCore.Mvc.IViewComponentHelper", "Component"),
|
||||||
new InjectChunk("Microsoft.AspNetCore.Mvc.IUrlHelper", "Url"),
|
new InjectChunk("Microsoft.AspNetCore.Mvc.IUrlHelper", "Url"),
|
||||||
|
new InjectChunk("Microsoft.AspNetCore.Mvc.ViewFeatures.IModelExpressionProvider", ModelExpressionProviderProperty),
|
||||||
new AddTagHelperChunk
|
new AddTagHelperChunk
|
||||||
{
|
{
|
||||||
LookupText = "Microsoft.AspNetCore.Mvc.Razor.TagHelpers.UrlResolutionTagHelper, Microsoft.AspNetCore.Mvc.Razor"
|
LookupText = "Microsoft.AspNetCore.Mvc.Razor.TagHelpers.UrlResolutionTagHelper, Microsoft.AspNetCore.Mvc.Razor"
|
||||||
|
|
@ -206,7 +210,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public virtual string ModelExpressionType
|
public virtual string ModelExpressionType
|
||||||
{
|
{
|
||||||
get { return "Microsoft.AspNetCore.Mvc.Rendering.ModelExpression"; }
|
get { return "Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpression"; }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
@ -217,6 +221,22 @@ namespace Microsoft.AspNetCore.Mvc.Razor
|
||||||
get { return "CreateModelExpression"; }
|
get { return "CreateModelExpression"; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the property name for <c>IModelExpressionProvider</c>.
|
||||||
|
/// </summary>
|
||||||
|
public virtual string ModelExpressionProvider
|
||||||
|
{
|
||||||
|
get { return ModelExpressionProviderProperty; }
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the property name for <c>ViewDataDictionary</c>.
|
||||||
|
/// </summary>
|
||||||
|
public virtual string ViewDataPropertyName
|
||||||
|
{
|
||||||
|
get { return ViewDataProperty; }
|
||||||
|
}
|
||||||
|
|
||||||
// Internal for testing
|
// Internal for testing
|
||||||
internal ChunkInheritanceUtility ChunkInheritanceUtility
|
internal ChunkInheritanceUtility ChunkInheritanceUtility
|
||||||
{
|
{
|
||||||
|
|
@ -317,7 +337,9 @@ namespace Microsoft.AspNetCore.Mvc.Razor
|
||||||
new GeneratedTagHelperAttributeContext
|
new GeneratedTagHelperAttributeContext
|
||||||
{
|
{
|
||||||
ModelExpressionTypeName = ModelExpressionType,
|
ModelExpressionTypeName = ModelExpressionType,
|
||||||
CreateModelExpressionMethodName = CreateModelExpressionMethod
|
CreateModelExpressionMethodName = CreateModelExpressionMethod,
|
||||||
|
ModelExpressionProviderPropertyName = ModelExpressionProviderProperty,
|
||||||
|
ViewDataPropertyName = ViewDataProperty,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -63,7 +63,9 @@ namespace Microsoft.AspNetCore.Mvc.Razor
|
||||||
if (attributeDescriptor.TypeName.Equals(_context.ModelExpressionTypeName, StringComparison.Ordinal))
|
if (attributeDescriptor.TypeName.Equals(_context.ModelExpressionTypeName, StringComparison.Ordinal))
|
||||||
{
|
{
|
||||||
writer
|
writer
|
||||||
.WriteStartMethodInvocation(_context.CreateModelExpressionMethodName)
|
.WriteStartInstanceMethodInvocation(_context.ModelExpressionProviderPropertyName, _context.CreateModelExpressionMethodName)
|
||||||
|
.Write(_context.ViewDataPropertyName)
|
||||||
|
.WriteParameterSeparator()
|
||||||
.Write(ModelLambdaVariableName)
|
.Write(ModelLambdaVariableName)
|
||||||
.Write(" => ");
|
.Write(" => ");
|
||||||
if (!complexValue)
|
if (!complexValue)
|
||||||
|
|
|
||||||
|
|
@ -186,22 +186,6 @@ namespace Microsoft.AspNetCore.Mvc.Razor
|
||||||
return string.Format(CultureInfo.CurrentCulture, GetString("RazorPage_CannotFlushWhileInAWritingScope"), p0, p1);
|
return string.Format(CultureInfo.CurrentCulture, GetString("RazorPage_CannotFlushWhileInAWritingScope"), p0, p1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The {0} was unable to provide metadata for expression '{1}'.
|
|
||||||
/// </summary>
|
|
||||||
internal static string RazorPage_NullModelMetadata
|
|
||||||
{
|
|
||||||
get { return GetString("RazorPage_NullModelMetadata"); }
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The {0} was unable to provide metadata for expression '{1}'.
|
|
||||||
/// </summary>
|
|
||||||
internal static string FormatRazorPage_NullModelMetadata(object p0, object p1)
|
|
||||||
{
|
|
||||||
return string.Format(CultureInfo.CurrentCulture, GetString("RazorPage_NullModelMetadata"), p0, p1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// {0} invocation in '{1}' is invalid. {0} can only be called from a layout page.
|
/// {0} invocation in '{1}' is invalid. {0} can only be called from a layout page.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
||||||
|
|
@ -35,6 +35,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor
|
||||||
private Func<ViewContext, object> _jsonHelperAccessor;
|
private Func<ViewContext, object> _jsonHelperAccessor;
|
||||||
private Func<ViewContext, object> _diagnosticSourceAccessor;
|
private Func<ViewContext, object> _diagnosticSourceAccessor;
|
||||||
private Func<ViewContext, object> _htmlEncoderAccessor;
|
private Func<ViewContext, object> _htmlEncoderAccessor;
|
||||||
|
private Func<ViewContext, object> _modelExpressionProviderAccessor;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Initializes a new instance of the <see cref="RazorPageActivator"/> class.
|
/// Initializes a new instance of the <see cref="RazorPageActivator"/> class.
|
||||||
|
|
@ -44,7 +45,8 @@ namespace Microsoft.AspNetCore.Mvc.Razor
|
||||||
IUrlHelperFactory urlHelperFactory,
|
IUrlHelperFactory urlHelperFactory,
|
||||||
IJsonHelper jsonHelper,
|
IJsonHelper jsonHelper,
|
||||||
DiagnosticSource diagnosticSource,
|
DiagnosticSource diagnosticSource,
|
||||||
HtmlEncoder htmlEncoder)
|
HtmlEncoder htmlEncoder,
|
||||||
|
IModelExpressionProvider modelExpressionProvider)
|
||||||
{
|
{
|
||||||
_activationInfo = new ConcurrentDictionary<Type, PageActivationInfo>();
|
_activationInfo = new ConcurrentDictionary<Type, PageActivationInfo>();
|
||||||
_metadataProvider = metadataProvider;
|
_metadataProvider = metadataProvider;
|
||||||
|
|
@ -52,6 +54,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor
|
||||||
_jsonHelperAccessor = context => jsonHelper;
|
_jsonHelperAccessor = context => jsonHelper;
|
||||||
_diagnosticSourceAccessor = context => diagnosticSource;
|
_diagnosticSourceAccessor = context => diagnosticSource;
|
||||||
_htmlEncoderAccessor = context => htmlEncoder;
|
_htmlEncoderAccessor = context => htmlEncoder;
|
||||||
|
_modelExpressionProviderAccessor = context => modelExpressionProvider;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
|
|
@ -190,6 +193,10 @@ namespace Microsoft.AspNetCore.Mvc.Razor
|
||||||
{
|
{
|
||||||
valueAccessor = _htmlEncoderAccessor;
|
valueAccessor = _htmlEncoderAccessor;
|
||||||
}
|
}
|
||||||
|
else if (property.PropertyType == typeof(IModelExpressionProvider))
|
||||||
|
{
|
||||||
|
valueAccessor = _modelExpressionProviderAccessor;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
valueAccessor = context =>
|
valueAccessor = context =>
|
||||||
|
|
|
||||||
|
|
@ -18,8 +18,6 @@ namespace Microsoft.AspNetCore.Mvc.Razor
|
||||||
/// <typeparam name="TModel">The type of the view data model.</typeparam>
|
/// <typeparam name="TModel">The type of the view data model.</typeparam>
|
||||||
public abstract class RazorPage<TModel> : RazorPage
|
public abstract class RazorPage<TModel> : RazorPage
|
||||||
{
|
{
|
||||||
private IModelMetadataProvider _provider;
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the Model property of the <see cref="ViewData"/> property.
|
/// Gets the Model property of the <see cref="ViewData"/> property.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
@ -37,43 +35,5 @@ namespace Microsoft.AspNetCore.Mvc.Razor
|
||||||
[RazorInject]
|
[RazorInject]
|
||||||
public ViewDataDictionary<TModel> ViewData { get; set; }
|
public ViewDataDictionary<TModel> ViewData { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the expression text cache for model expressions.
|
|
||||||
/// </summary>
|
|
||||||
[RazorInject]
|
|
||||||
private ExpressionTextCache ExpressionTextCache { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Returns a <see cref="ModelExpression"/> instance describing the given <paramref name="expression"/>.
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="TValue">The type of the <paramref name="expression"/> result.</typeparam>
|
|
||||||
/// <param name="expression">An expression to be evaluated against the current model.</param>
|
|
||||||
/// <returns>A new <see cref="ModelExpression"/> instance describing the given <paramref name="expression"/>.
|
|
||||||
/// </returns>
|
|
||||||
/// <remarks>
|
|
||||||
/// Compiler normally infers <typeparamref name="TValue"/> from the given <paramref name="expression"/>.
|
|
||||||
/// </remarks>
|
|
||||||
public ModelExpression CreateModelExpression<TValue>(Expression<Func<TModel, TValue>> expression)
|
|
||||||
{
|
|
||||||
if (expression == null)
|
|
||||||
{
|
|
||||||
throw new ArgumentNullException(nameof(expression));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_provider == null)
|
|
||||||
{
|
|
||||||
_provider = Context.RequestServices.GetRequiredService<IModelMetadataProvider>();
|
|
||||||
}
|
|
||||||
|
|
||||||
var name = ExpressionHelper.GetExpressionText(expression, ExpressionTextCache);
|
|
||||||
var modelExplorer = ExpressionMetadataProvider.FromLambdaExpression(expression, ViewData, _provider);
|
|
||||||
if (modelExplorer == null)
|
|
||||||
{
|
|
||||||
throw new InvalidOperationException(
|
|
||||||
Resources.FormatRazorPage_NullModelMetadata(nameof(IModelMetadataProvider), name));
|
|
||||||
}
|
|
||||||
|
|
||||||
return new ModelExpression(name, modelExplorer);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -150,9 +150,6 @@
|
||||||
<data name="RazorPage_CannotFlushWhileInAWritingScope" xml:space="preserve">
|
<data name="RazorPage_CannotFlushWhileInAWritingScope" xml:space="preserve">
|
||||||
<value>The {0} operation cannot be performed while inside a writing scope in '{1}'.</value>
|
<value>The {0} operation cannot be performed while inside a writing scope in '{1}'.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="RazorPage_NullModelMetadata" xml:space="preserve">
|
|
||||||
<value>The {0} was unable to provide metadata for expression '{1}'.</value>
|
|
||||||
</data>
|
|
||||||
<data name="RazorPage_MethodCannotBeCalled" xml:space="preserve">
|
<data name="RazorPage_MethodCannotBeCalled" xml:space="preserve">
|
||||||
<value>{0} invocation in '{1}' is invalid. {0} can only be called from a layout page.</value>
|
<value>{0} invocation in '{1}' is invalid. {0} can only be called from a layout page.</value>
|
||||||
</data>
|
</data>
|
||||||
|
|
|
||||||
|
|
@ -115,6 +115,7 @@ namespace Microsoft.Extensions.DependencyInjection
|
||||||
services.TryAddTransient(typeof(IHtmlHelper<>), typeof(HtmlHelper<>));
|
services.TryAddTransient(typeof(IHtmlHelper<>), typeof(HtmlHelper<>));
|
||||||
services.TryAddSingleton<IHtmlGenerator, DefaultHtmlGenerator>();
|
services.TryAddSingleton<IHtmlGenerator, DefaultHtmlGenerator>();
|
||||||
services.TryAddSingleton<ExpressionTextCache>();
|
services.TryAddSingleton<ExpressionTextCache>();
|
||||||
|
services.TryAddSingleton<IModelExpressionProvider, ModelExpressionProvider>();
|
||||||
|
|
||||||
//
|
//
|
||||||
// JSON Helper
|
// JSON Helper
|
||||||
|
|
|
||||||
|
|
@ -874,6 +874,22 @@ namespace Microsoft.AspNetCore.Mvc.ViewFeatures
|
||||||
return string.Format(CultureInfo.CurrentCulture, GetString("ValueInterfaceAbstractOrOpenGenericTypesCannotBeActivated"), p0, p1);
|
return string.Format(CultureInfo.CurrentCulture, GetString("ValueInterfaceAbstractOrOpenGenericTypesCannotBeActivated"), p0, p1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The {0} was unable to provide metadata for expression '{1}'.
|
||||||
|
/// </summary>
|
||||||
|
internal static string CreateModelExpression_NullModelMetadata
|
||||||
|
{
|
||||||
|
get { return GetString("CreateModelExpression_NullModelMetadata"); }
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The {0} was unable to provide metadata for expression '{1}'.
|
||||||
|
/// </summary>
|
||||||
|
internal static string FormatCreateModelExpression_NullModelMetadata(object p0, object p1)
|
||||||
|
{
|
||||||
|
return string.Format(CultureInfo.CurrentCulture, GetString("CreateModelExpression_NullModelMetadata"), p0, p1);
|
||||||
|
}
|
||||||
|
|
||||||
private static string GetString(string name, params string[] formatterNames)
|
private static string GetString(string name, params string[] formatterNames)
|
||||||
{
|
{
|
||||||
var value = _resourceManager.GetString(name);
|
var value = _resourceManager.GetString(name);
|
||||||
|
|
|
||||||
|
|
@ -280,4 +280,7 @@
|
||||||
<data name="ValueInterfaceAbstractOrOpenGenericTypesCannotBeActivated" xml:space="preserve">
|
<data name="ValueInterfaceAbstractOrOpenGenericTypesCannotBeActivated" xml:space="preserve">
|
||||||
<value>The type '{0}' cannot be activated by '{1}' because it is either a value type, an interface, an abstract class or an open generic type.</value>
|
<value>The type '{0}' cannot be activated by '{1}' because it is either a value type, an interface, an abstract class or an open generic type.</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="CreateModelExpression_NullModelMetadata" xml:space="preserve">
|
||||||
|
<value>The {0} was unable to provide metadata for expression '{1}'.</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|
@ -0,0 +1,27 @@
|
||||||
|
// 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;
|
||||||
|
using System.Linq.Expressions;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNetCore.Mvc.ViewFeatures
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Provides <see cref="ModelExpression"/> for a Lambda expression.
|
||||||
|
/// </summary>
|
||||||
|
public interface IModelExpressionProvider
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Returns a <see cref="ModelExpression"/> instance describing the given <paramref name="expression"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TModel">The type of the <paramref name="viewData"/>'s <see cref="ViewDataDictionary{T}.Model"/>.</typeparam>
|
||||||
|
/// <typeparam name="TValue">The type of the <paramref name="expression"/> result.</typeparam>
|
||||||
|
/// <param name="viewData">The <see cref="ViewDataDictionary{TModel}"/> containing the <see cref="ViewDataDictionary{T}.Model"/>
|
||||||
|
/// against which <paramref name="expression"/> is evaluated. </param>
|
||||||
|
/// <param name="expression">An expression to be evaluated against the current model.</param>
|
||||||
|
/// <returns>A new <see cref="ModelExpression"/> instance describing the given <paramref name="expression"/>.</returns>
|
||||||
|
ModelExpression CreateModelExpression<TModel, TValue>(
|
||||||
|
ViewDataDictionary<TModel> viewData,
|
||||||
|
Expression<Func<TModel, TValue>> expression);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -5,7 +5,7 @@ using System;
|
||||||
using Microsoft.AspNetCore.Mvc.ModelBinding;
|
using Microsoft.AspNetCore.Mvc.ModelBinding;
|
||||||
using Microsoft.AspNetCore.Mvc.ViewFeatures;
|
using Microsoft.AspNetCore.Mvc.ViewFeatures;
|
||||||
|
|
||||||
namespace Microsoft.AspNetCore.Mvc.Rendering
|
namespace Microsoft.AspNetCore.Mvc.ViewFeatures
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Describes an <see cref="System.Linq.Expressions.Expression"/> passed to a tag helper.
|
/// Describes an <see cref="System.Linq.Expressions.Expression"/> passed to a tag helper.
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,68 @@
|
||||||
|
// 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;
|
||||||
|
using System.Linq.Expressions;
|
||||||
|
using Microsoft.AspNetCore.Mvc.ModelBinding;
|
||||||
|
using Microsoft.AspNetCore.Mvc.ViewFeatures.Internal;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNetCore.Mvc.ViewFeatures
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// A default implementation of <see cref="IModelMetadataProvider"/>.
|
||||||
|
/// </summary>
|
||||||
|
public class ModelExpressionProvider : IModelExpressionProvider
|
||||||
|
{
|
||||||
|
private readonly IModelMetadataProvider _modelMetadataProvider;
|
||||||
|
private readonly ExpressionTextCache _expressionTextCache;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Creates a new <see cref="ModelExpressionProvider"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="modelMetadataProvider">The <see cref="IModelMetadataProvider"/>.</param>
|
||||||
|
/// <param name="expressionTextCache">The <see cref="ExpressionTextCache"/>.</param>
|
||||||
|
public ModelExpressionProvider(
|
||||||
|
IModelMetadataProvider modelMetadataProvider,
|
||||||
|
ExpressionTextCache expressionTextCache)
|
||||||
|
{
|
||||||
|
if (modelMetadataProvider == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(modelMetadataProvider));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (expressionTextCache == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(expressionTextCache));
|
||||||
|
}
|
||||||
|
|
||||||
|
_modelMetadataProvider = modelMetadataProvider;
|
||||||
|
_expressionTextCache = expressionTextCache;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
public ModelExpression CreateModelExpression<TModel, TValue>(
|
||||||
|
ViewDataDictionary<TModel> viewData,
|
||||||
|
Expression<Func<TModel, TValue>> expression)
|
||||||
|
{
|
||||||
|
if (viewData == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(viewData));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (expression == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(expression));
|
||||||
|
}
|
||||||
|
|
||||||
|
var name = ExpressionHelper.GetExpressionText(expression, _expressionTextCache);
|
||||||
|
var modelExplorer = ExpressionMetadataProvider.FromLambdaExpression(expression, viewData, _modelMetadataProvider);
|
||||||
|
if (modelExplorer == null)
|
||||||
|
{
|
||||||
|
throw new InvalidOperationException(
|
||||||
|
Resources.FormatCreateModelExpression_NullModelMetadata(nameof(IModelMetadataProvider), name));
|
||||||
|
}
|
||||||
|
|
||||||
|
return new ModelExpression(name, modelExplorer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
// Copyright (c) .NET Foundation. All rights reserved.
|
// 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.
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
using Microsoft.AspNetCore.Mvc.Rendering;
|
using Microsoft.AspNetCore.Mvc.ViewFeatures;
|
||||||
using Microsoft.AspNetCore.Razor.TagHelpers;
|
using Microsoft.AspNetCore.Razor.TagHelpers;
|
||||||
|
|
||||||
namespace Microsoft.AspNetCore.Mvc.Razor
|
namespace Microsoft.AspNetCore.Mvc.Razor
|
||||||
|
|
|
||||||
|
|
@ -139,33 +139,33 @@ namespace Microsoft.AspNetCore.Mvc.Razor
|
||||||
documentAbsoluteIndex: 33,
|
documentAbsoluteIndex: 33,
|
||||||
documentLineIndex: 2,
|
documentLineIndex: 2,
|
||||||
documentCharacterIndex: 14,
|
documentCharacterIndex: 14,
|
||||||
generatedAbsoluteIndex: 597,
|
generatedAbsoluteIndex: 647,
|
||||||
generatedLineIndex: 16,
|
generatedLineIndex: 17,
|
||||||
generatedCharacterIndex: 48,
|
generatedCharacterIndex: 48,
|
||||||
contentLength: 91),
|
contentLength: 91),
|
||||||
BuildLineMapping(
|
BuildLineMapping(
|
||||||
documentAbsoluteIndex: 7,
|
documentAbsoluteIndex: 7,
|
||||||
documentLineIndex: 0,
|
documentLineIndex: 0,
|
||||||
documentCharacterIndex: 7,
|
documentCharacterIndex: 7,
|
||||||
generatedAbsoluteIndex: 779,
|
generatedAbsoluteIndex: 829,
|
||||||
generatedLineIndex: 18,
|
generatedLineIndex: 19,
|
||||||
generatedCharacterIndex: 28,
|
generatedCharacterIndex: 28,
|
||||||
contentLength: 8),
|
contentLength: 8),
|
||||||
BuildLineMapping(
|
BuildLineMapping(
|
||||||
documentAbsoluteIndex: 145,
|
documentAbsoluteIndex: 145,
|
||||||
documentLineIndex: 4,
|
documentLineIndex: 4,
|
||||||
documentCharacterIndex: 17,
|
documentCharacterIndex: 17,
|
||||||
generatedAbsoluteIndex: 2242,
|
generatedAbsoluteIndex: 2523,
|
||||||
generatedLineIndex: 47,
|
generatedLineIndex: 50,
|
||||||
generatedCharacterIndex: 99,
|
generatedCharacterIndex: 133,
|
||||||
contentLength: 3),
|
contentLength: 3),
|
||||||
BuildLineMapping(
|
BuildLineMapping(
|
||||||
documentAbsoluteIndex: 172,
|
documentAbsoluteIndex: 172,
|
||||||
documentLineIndex: 5,
|
documentLineIndex: 5,
|
||||||
documentCharacterIndex: 18,
|
documentCharacterIndex: 18,
|
||||||
generatedAbsoluteIndex: 2575,
|
generatedAbsoluteIndex: 2890,
|
||||||
generatedLineIndex: 53,
|
generatedLineIndex: 56,
|
||||||
generatedCharacterIndex: 91,
|
generatedCharacterIndex: 125,
|
||||||
contentLength: 5),
|
contentLength: 5),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -213,16 +213,16 @@ namespace Microsoft.AspNetCore.Mvc.Razor
|
||||||
documentAbsoluteIndex: 13,
|
documentAbsoluteIndex: 13,
|
||||||
documentLineIndex: 0,
|
documentLineIndex: 0,
|
||||||
documentCharacterIndex: 13,
|
documentCharacterIndex: 13,
|
||||||
generatedAbsoluteIndex: 1295,
|
generatedAbsoluteIndex: 1492,
|
||||||
generatedLineIndex: 32,
|
generatedLineIndex: 34,
|
||||||
generatedCharacterIndex: 13,
|
generatedCharacterIndex: 13,
|
||||||
contentLength: 4),
|
contentLength: 4),
|
||||||
BuildLineMapping(
|
BuildLineMapping(
|
||||||
documentAbsoluteIndex: 43,
|
documentAbsoluteIndex: 43,
|
||||||
documentLineIndex: 2,
|
documentLineIndex: 2,
|
||||||
documentCharacterIndex: 5,
|
documentCharacterIndex: 5,
|
||||||
generatedAbsoluteIndex: 1379,
|
generatedAbsoluteIndex: 1576,
|
||||||
generatedLineIndex: 37,
|
generatedLineIndex: 39,
|
||||||
generatedCharacterIndex: 6,
|
generatedCharacterIndex: 6,
|
||||||
contentLength: 21),
|
contentLength: 21),
|
||||||
};
|
};
|
||||||
|
|
@ -611,7 +611,9 @@ namespace Microsoft.AspNetCore.Mvc.Razor
|
||||||
new GeneratedTagHelperAttributeContext
|
new GeneratedTagHelperAttributeContext
|
||||||
{
|
{
|
||||||
ModelExpressionTypeName = ModelExpressionType,
|
ModelExpressionTypeName = ModelExpressionType,
|
||||||
CreateModelExpressionMethodName = CreateModelExpressionMethod
|
CreateModelExpressionMethodName = CreateModelExpressionMethod,
|
||||||
|
ModelExpressionProviderPropertyName = ModelExpressionProvider,
|
||||||
|
ViewDataPropertyName = ViewDataPropertyName
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -664,7 +666,9 @@ namespace Microsoft.AspNetCore.Mvc.Razor
|
||||||
new GeneratedTagHelperAttributeContext
|
new GeneratedTagHelperAttributeContext
|
||||||
{
|
{
|
||||||
ModelExpressionTypeName = ModelExpressionType,
|
ModelExpressionTypeName = ModelExpressionType,
|
||||||
CreateModelExpressionMethodName = CreateModelExpressionMethod
|
CreateModelExpressionMethodName = CreateModelExpressionMethod,
|
||||||
|
ModelExpressionProviderPropertyName = ModelExpressionProvider,
|
||||||
|
ViewDataPropertyName = ViewDataPropertyName
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Microsoft.AspNetCore.Mvc.Rendering;
|
using Microsoft.AspNetCore.Mvc.ViewFeatures;
|
||||||
using Microsoft.AspNetCore.Razor;
|
using Microsoft.AspNetCore.Razor;
|
||||||
using Microsoft.AspNetCore.Razor.Chunks;
|
using Microsoft.AspNetCore.Razor.Chunks;
|
||||||
using Microsoft.AspNetCore.Razor.Compilation.TagHelpers;
|
using Microsoft.AspNetCore.Razor.Compilation.TagHelpers;
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor
|
||||||
public class MvcTagHelperAttributeValueCodeRendererTest
|
public class MvcTagHelperAttributeValueCodeRendererTest
|
||||||
{
|
{
|
||||||
[Theory]
|
[Theory]
|
||||||
[InlineData("SomeType", "SomeType", "SomeMethod(__model => __model.MyValue)")]
|
[InlineData("SomeType", "SomeType", "Provider.SomeMethod(ViewData, __model => __model.MyValue)")]
|
||||||
[InlineData("SomeType", "SomeType2", "MyValue")]
|
[InlineData("SomeType", "SomeType2", "MyValue")]
|
||||||
public void RenderAttributeValue_RendersModelExpressionsCorrectly(
|
public void RenderAttributeValue_RendersModelExpressionsCorrectly(
|
||||||
string modelExpressionType,
|
string modelExpressionType,
|
||||||
|
|
@ -24,7 +24,9 @@ namespace Microsoft.AspNetCore.Mvc.Razor
|
||||||
new GeneratedTagHelperAttributeContext
|
new GeneratedTagHelperAttributeContext
|
||||||
{
|
{
|
||||||
ModelExpressionTypeName = modelExpressionType,
|
ModelExpressionTypeName = modelExpressionType,
|
||||||
CreateModelExpressionMethodName = "SomeMethod"
|
CreateModelExpressionMethodName = "SomeMethod",
|
||||||
|
ModelExpressionProviderPropertyName = "Provider",
|
||||||
|
ViewDataPropertyName = "ViewData"
|
||||||
});
|
});
|
||||||
var attributeDescriptor = new TagHelperAttributeDescriptor
|
var attributeDescriptor = new TagHelperAttributeDescriptor
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,8 @@ namespace Asp
|
||||||
}
|
}
|
||||||
#line hidden
|
#line hidden
|
||||||
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
||||||
|
public Microsoft.AspNetCore.Mvc.ViewFeatures.IModelExpressionProvider ModelExpressionProvider { get; private set; }
|
||||||
|
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
||||||
public Microsoft.AspNetCore.Mvc.IUrlHelper Url { get; private set; }
|
public Microsoft.AspNetCore.Mvc.IUrlHelper Url { get; private set; }
|
||||||
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
||||||
public Microsoft.AspNetCore.Mvc.IViewComponentHelper Component { get; private set; }
|
public Microsoft.AspNetCore.Mvc.IViewComponentHelper Component { get; private set; }
|
||||||
|
|
|
||||||
|
|
@ -30,6 +30,8 @@ using MyNamespace
|
||||||
#line hidden
|
#line hidden
|
||||||
{ get; private set; }
|
{ get; private set; }
|
||||||
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
||||||
|
public Microsoft.AspNetCore.Mvc.ViewFeatures.IModelExpressionProvider ModelExpressionProvider { get; private set; }
|
||||||
|
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
||||||
public Microsoft.AspNetCore.Mvc.IUrlHelper Url { get; private set; }
|
public Microsoft.AspNetCore.Mvc.IUrlHelper Url { get; private set; }
|
||||||
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
||||||
public Microsoft.AspNetCore.Mvc.IViewComponentHelper Component { get; private set; }
|
public Microsoft.AspNetCore.Mvc.IViewComponentHelper Component { get; private set; }
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,8 @@ var __modelHelper = default(MyModel);
|
||||||
#line hidden
|
#line hidden
|
||||||
{ get; private set; }
|
{ get; private set; }
|
||||||
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
||||||
|
public Microsoft.AspNetCore.Mvc.ViewFeatures.IModelExpressionProvider ModelExpressionProvider { get; private set; }
|
||||||
|
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
||||||
public Microsoft.AspNetCore.Mvc.IUrlHelper Url { get; private set; }
|
public Microsoft.AspNetCore.Mvc.IUrlHelper Url { get; private set; }
|
||||||
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
||||||
public Microsoft.AspNetCore.Mvc.IViewComponentHelper Component { get; private set; }
|
public Microsoft.AspNetCore.Mvc.IViewComponentHelper Component { get; private set; }
|
||||||
|
|
|
||||||
|
|
@ -53,6 +53,8 @@ var __modelHelper = default(MyModel);
|
||||||
#line hidden
|
#line hidden
|
||||||
{ get; private set; }
|
{ get; private set; }
|
||||||
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
||||||
|
public Microsoft.AspNetCore.Mvc.ViewFeatures.IModelExpressionProvider ModelExpressionProvider { get; private set; }
|
||||||
|
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
||||||
public Microsoft.AspNetCore.Mvc.IUrlHelper Url { get; private set; }
|
public Microsoft.AspNetCore.Mvc.IUrlHelper Url { get; private set; }
|
||||||
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
||||||
public Microsoft.AspNetCore.Mvc.IViewComponentHelper Component { get; private set; }
|
public Microsoft.AspNetCore.Mvc.IViewComponentHelper Component { get; private set; }
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,8 @@ var __modelHelper = default(System.Collections.IEnumerable);
|
||||||
}
|
}
|
||||||
#line hidden
|
#line hidden
|
||||||
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
||||||
|
public Microsoft.AspNetCore.Mvc.ViewFeatures.IModelExpressionProvider ModelExpressionProvider { get; private set; }
|
||||||
|
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
||||||
public Microsoft.AspNetCore.Mvc.IUrlHelper Url { get; private set; }
|
public Microsoft.AspNetCore.Mvc.IUrlHelper Url { get; private set; }
|
||||||
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
||||||
public Microsoft.AspNetCore.Mvc.IViewComponentHelper Component { get; private set; }
|
public Microsoft.AspNetCore.Mvc.IViewComponentHelper Component { get; private set; }
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ namespace Asp
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Microsoft.AspNetCore.Mvc.Rendering;
|
using Microsoft.AspNetCore.Mvc.Rendering;
|
||||||
|
using Microsoft.AspNetCore.Mvc.ViewFeatures;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
public class testfiles_input_modelexpressiontaghelper_cshtml : Microsoft.AspNetCore.Mvc.Razor.RazorPage<DateTime>
|
public class testfiles_input_modelexpressiontaghelper_cshtml : Microsoft.AspNetCore.Mvc.Razor.RazorPage<DateTime>
|
||||||
|
|
@ -30,6 +31,8 @@ var __modelHelper = default(DateTime);
|
||||||
}
|
}
|
||||||
#line hidden
|
#line hidden
|
||||||
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
||||||
|
public Microsoft.AspNetCore.Mvc.ViewFeatures.IModelExpressionProvider ModelExpressionProvider { get; private set; }
|
||||||
|
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
||||||
public Microsoft.AspNetCore.Mvc.IUrlHelper Url { get; private set; }
|
public Microsoft.AspNetCore.Mvc.IUrlHelper Url { get; private set; }
|
||||||
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
||||||
public Microsoft.AspNetCore.Mvc.IViewComponentHelper Component { get; private set; }
|
public Microsoft.AspNetCore.Mvc.IViewComponentHelper Component { get; private set; }
|
||||||
|
|
@ -45,13 +48,13 @@ var __modelHelper = default(DateTime);
|
||||||
{
|
{
|
||||||
__Microsoft_AspNetCore_Mvc_Razor_InputTestTagHelper = CreateTagHelper<global::Microsoft.AspNetCore.Mvc.Razor.InputTestTagHelper>();
|
__Microsoft_AspNetCore_Mvc_Razor_InputTestTagHelper = CreateTagHelper<global::Microsoft.AspNetCore.Mvc.Razor.InputTestTagHelper>();
|
||||||
#line 5 "testfiles/input/modelexpressiontaghelper.cshtml"
|
#line 5 "testfiles/input/modelexpressiontaghelper.cshtml"
|
||||||
__Microsoft_AspNetCore_Mvc_Razor_InputTestTagHelper.For = CreateModelExpression(__model => __model.Now);
|
__Microsoft_AspNetCore_Mvc_Razor_InputTestTagHelper.For = ModelExpressionProvider.CreateModelExpression(ViewData, __model => __model.Now);
|
||||||
|
|
||||||
#line default
|
#line default
|
||||||
#line hidden
|
#line hidden
|
||||||
__Microsoft_AspNetCore_Mvc_Razor_InputTestTagHelper = CreateTagHelper<global::Microsoft.AspNetCore.Mvc.Razor.InputTestTagHelper>();
|
__Microsoft_AspNetCore_Mvc_Razor_InputTestTagHelper = CreateTagHelper<global::Microsoft.AspNetCore.Mvc.Razor.InputTestTagHelper>();
|
||||||
#line 6 "testfiles/input/modelexpressiontaghelper.cshtml"
|
#line 6 "testfiles/input/modelexpressiontaghelper.cshtml"
|
||||||
__Microsoft_AspNetCore_Mvc_Razor_InputTestTagHelper.For = CreateModelExpression(__model => Model);
|
__Microsoft_AspNetCore_Mvc_Razor_InputTestTagHelper.For = ModelExpressionProvider.CreateModelExpression(ViewData, __model => Model);
|
||||||
|
|
||||||
#line default
|
#line default
|
||||||
#line hidden
|
#line hidden
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,8 @@ var __modelHelper = default(System.Collections.IEnumerable);
|
||||||
}
|
}
|
||||||
#line hidden
|
#line hidden
|
||||||
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
||||||
|
public Microsoft.AspNetCore.Mvc.ViewFeatures.IModelExpressionProvider ModelExpressionProvider { get; private set; }
|
||||||
|
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
||||||
public Microsoft.AspNetCore.Mvc.IUrlHelper Url { get; private set; }
|
public Microsoft.AspNetCore.Mvc.IUrlHelper Url { get; private set; }
|
||||||
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
||||||
public Microsoft.AspNetCore.Mvc.IViewComponentHelper Component { get; private set; }
|
public Microsoft.AspNetCore.Mvc.IViewComponentHelper Component { get; private set; }
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,8 @@ namespace Asp
|
||||||
#line hidden
|
#line hidden
|
||||||
{ get; private set; }
|
{ get; private set; }
|
||||||
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
||||||
|
public Microsoft.AspNetCore.Mvc.ViewFeatures.IModelExpressionProvider ModelExpressionProvider { get; private set; }
|
||||||
|
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
||||||
public Microsoft.AspNetCore.Mvc.IUrlHelper Url { get; private set; }
|
public Microsoft.AspNetCore.Mvc.IUrlHelper Url { get; private set; }
|
||||||
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
||||||
public Microsoft.AspNetCore.Mvc.IViewComponentHelper Component { get; private set; }
|
public Microsoft.AspNetCore.Mvc.IViewComponentHelper Component { get; private set; }
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ namespace Asp
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Microsoft.AspNetCore.Mvc.Rendering;
|
using Microsoft.AspNetCore.Mvc.Rendering;
|
||||||
|
using Microsoft.AspNetCore.Mvc.ViewFeatures;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
public class TestFiles_Input_Basic_cshtml : Microsoft.AspNetCore.Mvc.Razor.RazorPage<dynamic>
|
public class TestFiles_Input_Basic_cshtml : Microsoft.AspNetCore.Mvc.Razor.RazorPage<dynamic>
|
||||||
|
|
@ -16,6 +17,8 @@ namespace Asp
|
||||||
}
|
}
|
||||||
#line hidden
|
#line hidden
|
||||||
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
||||||
|
public Microsoft.AspNetCore.Mvc.ViewFeatures.IModelExpressionProvider ModelExpressionProvider { get; private set; }
|
||||||
|
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
||||||
public Microsoft.AspNetCore.Mvc.IUrlHelper Url { get; private set; }
|
public Microsoft.AspNetCore.Mvc.IUrlHelper Url { get; private set; }
|
||||||
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
||||||
public Microsoft.AspNetCore.Mvc.IViewComponentHelper Component { get; private set; }
|
public Microsoft.AspNetCore.Mvc.IViewComponentHelper Component { get; private set; }
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@ using MyNamespace
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Microsoft.AspNetCore.Mvc.Rendering;
|
using Microsoft.AspNetCore.Mvc.Rendering;
|
||||||
|
using Microsoft.AspNetCore.Mvc.ViewFeatures;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
public class TestFiles_Input_Inject_cshtml : Microsoft.AspNetCore.Mvc.Razor.RazorPage<dynamic>
|
public class TestFiles_Input_Inject_cshtml : Microsoft.AspNetCore.Mvc.Razor.RazorPage<dynamic>
|
||||||
|
|
@ -24,6 +25,8 @@ using MyNamespace
|
||||||
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
||||||
public MyApp MyPropertyName { get; private set; }
|
public MyApp MyPropertyName { get; private set; }
|
||||||
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
||||||
|
public Microsoft.AspNetCore.Mvc.ViewFeatures.IModelExpressionProvider ModelExpressionProvider { get; private set; }
|
||||||
|
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
||||||
public Microsoft.AspNetCore.Mvc.IUrlHelper Url { get; private set; }
|
public Microsoft.AspNetCore.Mvc.IUrlHelper Url { get; private set; }
|
||||||
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
||||||
public Microsoft.AspNetCore.Mvc.IViewComponentHelper Component { get; private set; }
|
public Microsoft.AspNetCore.Mvc.IViewComponentHelper Component { get; private set; }
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ namespace Asp
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Microsoft.AspNetCore.Mvc.Rendering;
|
using Microsoft.AspNetCore.Mvc.Rendering;
|
||||||
|
using Microsoft.AspNetCore.Mvc.ViewFeatures;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
public class TestFiles_Input_InjectWithModel_cshtml : Microsoft.AspNetCore.Mvc.Razor.RazorPage<MyModel>
|
public class TestFiles_Input_InjectWithModel_cshtml : Microsoft.AspNetCore.Mvc.Razor.RazorPage<MyModel>
|
||||||
|
|
@ -20,6 +21,8 @@ namespace Asp
|
||||||
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
||||||
public MyService<MyModel> Html { get; private set; }
|
public MyService<MyModel> Html { get; private set; }
|
||||||
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
||||||
|
public Microsoft.AspNetCore.Mvc.ViewFeatures.IModelExpressionProvider ModelExpressionProvider { get; private set; }
|
||||||
|
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
||||||
public Microsoft.AspNetCore.Mvc.IUrlHelper Url { get; private set; }
|
public Microsoft.AspNetCore.Mvc.IUrlHelper Url { get; private set; }
|
||||||
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
||||||
public Microsoft.AspNetCore.Mvc.IViewComponentHelper Component { get; private set; }
|
public Microsoft.AspNetCore.Mvc.IViewComponentHelper Component { get; private set; }
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ namespace Asp
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Microsoft.AspNetCore.Mvc.Rendering;
|
using Microsoft.AspNetCore.Mvc.Rendering;
|
||||||
|
using Microsoft.AspNetCore.Mvc.ViewFeatures;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
public class TestFiles_Input_InjectWithSemicolon_cshtml : Microsoft.AspNetCore.Mvc.Razor.RazorPage<MyModel>
|
public class TestFiles_Input_InjectWithSemicolon_cshtml : Microsoft.AspNetCore.Mvc.Razor.RazorPage<MyModel>
|
||||||
|
|
@ -24,6 +25,8 @@ namespace Asp
|
||||||
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
||||||
public MyService<MyModel> Html2 { get; private set; }
|
public MyService<MyModel> Html2 { get; private set; }
|
||||||
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
||||||
|
public Microsoft.AspNetCore.Mvc.ViewFeatures.IModelExpressionProvider ModelExpressionProvider { get; private set; }
|
||||||
|
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
||||||
public Microsoft.AspNetCore.Mvc.IUrlHelper Url { get; private set; }
|
public Microsoft.AspNetCore.Mvc.IUrlHelper Url { get; private set; }
|
||||||
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
||||||
public Microsoft.AspNetCore.Mvc.IViewComponentHelper Component { get; private set; }
|
public Microsoft.AspNetCore.Mvc.IViewComponentHelper Component { get; private set; }
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ namespace Asp
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Microsoft.AspNetCore.Mvc.Rendering;
|
using Microsoft.AspNetCore.Mvc.Rendering;
|
||||||
|
using Microsoft.AspNetCore.Mvc.ViewFeatures;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
public class TestFiles_Input_Model_cshtml : Microsoft.AspNetCore.Mvc.Razor.RazorPage<System.Collections.IEnumerable>
|
public class TestFiles_Input_Model_cshtml : Microsoft.AspNetCore.Mvc.Razor.RazorPage<System.Collections.IEnumerable>
|
||||||
|
|
@ -16,6 +17,8 @@ namespace Asp
|
||||||
}
|
}
|
||||||
#line hidden
|
#line hidden
|
||||||
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
||||||
|
public Microsoft.AspNetCore.Mvc.ViewFeatures.IModelExpressionProvider ModelExpressionProvider { get; private set; }
|
||||||
|
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
||||||
public Microsoft.AspNetCore.Mvc.IUrlHelper Url { get; private set; }
|
public Microsoft.AspNetCore.Mvc.IUrlHelper Url { get; private set; }
|
||||||
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
||||||
public Microsoft.AspNetCore.Mvc.IViewComponentHelper Component { get; private set; }
|
public Microsoft.AspNetCore.Mvc.IViewComponentHelper Component { get; private set; }
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ namespace Asp
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Microsoft.AspNetCore.Mvc.Rendering;
|
using Microsoft.AspNetCore.Mvc.Rendering;
|
||||||
|
using Microsoft.AspNetCore.Mvc.ViewFeatures;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
public class TestFiles_Input_ModelExpressionTagHelper_cshtml : Microsoft.AspNetCore.Mvc.Razor.RazorPage<DateTime>
|
public class TestFiles_Input_ModelExpressionTagHelper_cshtml : Microsoft.AspNetCore.Mvc.Razor.RazorPage<DateTime>
|
||||||
|
|
@ -24,6 +25,8 @@ namespace Asp
|
||||||
}
|
}
|
||||||
#line hidden
|
#line hidden
|
||||||
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
||||||
|
public Microsoft.AspNetCore.Mvc.ViewFeatures.IModelExpressionProvider ModelExpressionProvider { get; private set; }
|
||||||
|
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
||||||
public Microsoft.AspNetCore.Mvc.IUrlHelper Url { get; private set; }
|
public Microsoft.AspNetCore.Mvc.IUrlHelper Url { get; private set; }
|
||||||
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
||||||
public Microsoft.AspNetCore.Mvc.IViewComponentHelper Component { get; private set; }
|
public Microsoft.AspNetCore.Mvc.IViewComponentHelper Component { get; private set; }
|
||||||
|
|
@ -48,7 +51,7 @@ namespace Asp
|
||||||
__Microsoft_AspNetCore_Mvc_Razor_InputTestTagHelper = CreateTagHelper<global::Microsoft.AspNetCore.Mvc.Razor.InputTestTagHelper>();
|
__Microsoft_AspNetCore_Mvc_Razor_InputTestTagHelper = CreateTagHelper<global::Microsoft.AspNetCore.Mvc.Razor.InputTestTagHelper>();
|
||||||
__tagHelperExecutionContext.Add(__Microsoft_AspNetCore_Mvc_Razor_InputTestTagHelper);
|
__tagHelperExecutionContext.Add(__Microsoft_AspNetCore_Mvc_Razor_InputTestTagHelper);
|
||||||
#line 5 "TestFiles/Input/ModelExpressionTagHelper.cshtml"
|
#line 5 "TestFiles/Input/ModelExpressionTagHelper.cshtml"
|
||||||
__Microsoft_AspNetCore_Mvc_Razor_InputTestTagHelper.For = CreateModelExpression(__model => __model.Now);
|
__Microsoft_AspNetCore_Mvc_Razor_InputTestTagHelper.For = ModelExpressionProvider.CreateModelExpression(ViewData, __model => __model.Now);
|
||||||
|
|
||||||
#line default
|
#line default
|
||||||
#line hidden
|
#line hidden
|
||||||
|
|
@ -67,7 +70,7 @@ __Microsoft_AspNetCore_Mvc_Razor_InputTestTagHelper.For = CreateModelExpression(
|
||||||
__Microsoft_AspNetCore_Mvc_Razor_InputTestTagHelper = CreateTagHelper<global::Microsoft.AspNetCore.Mvc.Razor.InputTestTagHelper>();
|
__Microsoft_AspNetCore_Mvc_Razor_InputTestTagHelper = CreateTagHelper<global::Microsoft.AspNetCore.Mvc.Razor.InputTestTagHelper>();
|
||||||
__tagHelperExecutionContext.Add(__Microsoft_AspNetCore_Mvc_Razor_InputTestTagHelper);
|
__tagHelperExecutionContext.Add(__Microsoft_AspNetCore_Mvc_Razor_InputTestTagHelper);
|
||||||
#line 6 "TestFiles/Input/ModelExpressionTagHelper.cshtml"
|
#line 6 "TestFiles/Input/ModelExpressionTagHelper.cshtml"
|
||||||
__Microsoft_AspNetCore_Mvc_Razor_InputTestTagHelper.For = CreateModelExpression(__model => Model);
|
__Microsoft_AspNetCore_Mvc_Razor_InputTestTagHelper.For = ModelExpressionProvider.CreateModelExpression(ViewData, __model => Model);
|
||||||
|
|
||||||
#line default
|
#line default
|
||||||
#line hidden
|
#line hidden
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ namespace Asp
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Microsoft.AspNetCore.Mvc.Rendering;
|
using Microsoft.AspNetCore.Mvc.Rendering;
|
||||||
|
using Microsoft.AspNetCore.Mvc.ViewFeatures;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
public class TestFiles_Input__ViewImports_cshtml : Microsoft.AspNetCore.Mvc.Razor.RazorPage<dynamic>
|
public class TestFiles_Input__ViewImports_cshtml : Microsoft.AspNetCore.Mvc.Razor.RazorPage<dynamic>
|
||||||
|
|
@ -18,6 +19,8 @@ namespace Asp
|
||||||
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
||||||
public IHtmlHelper<dynamic> Model { get; private set; }
|
public IHtmlHelper<dynamic> Model { get; private set; }
|
||||||
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
||||||
|
public Microsoft.AspNetCore.Mvc.ViewFeatures.IModelExpressionProvider ModelExpressionProvider { get; private set; }
|
||||||
|
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
||||||
public Microsoft.AspNetCore.Mvc.IUrlHelper Url { get; private set; }
|
public Microsoft.AspNetCore.Mvc.IUrlHelper Url { get; private set; }
|
||||||
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
[Microsoft.AspNetCore.Mvc.Razor.Internal.RazorInjectAttribute]
|
||||||
public Microsoft.AspNetCore.Mvc.IViewComponentHelper Component { get; private set; }
|
public Microsoft.AspNetCore.Mvc.IViewComponentHelper Component { get; private set; }
|
||||||
|
|
|
||||||
|
|
@ -29,6 +29,8 @@ namespace Microsoft.AspNetCore.Mvc.Razor
|
||||||
public void Activate_ActivatesAndContextualizesPropertiesOnViews()
|
public void Activate_ActivatesAndContextualizesPropertiesOnViews()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
|
var modelMetadataProvider = new EmptyModelMetadataProvider();
|
||||||
|
var modelExpressionProvider = new ModelExpressionProvider(modelMetadataProvider, new ExpressionTextCache());
|
||||||
var urlHelperFactory = new UrlHelperFactory();
|
var urlHelperFactory = new UrlHelperFactory();
|
||||||
var jsonHelper = new JsonHelper(new JsonOutputFormatter());
|
var jsonHelper = new JsonHelper(new JsonOutputFormatter());
|
||||||
var htmlEncoder = new HtmlTestEncoder();
|
var htmlEncoder = new HtmlTestEncoder();
|
||||||
|
|
@ -38,7 +40,8 @@ namespace Microsoft.AspNetCore.Mvc.Razor
|
||||||
urlHelperFactory,
|
urlHelperFactory,
|
||||||
jsonHelper,
|
jsonHelper,
|
||||||
diagnosticSource,
|
diagnosticSource,
|
||||||
htmlEncoder);
|
htmlEncoder,
|
||||||
|
modelExpressionProvider);
|
||||||
|
|
||||||
var instance = new TestRazorPage();
|
var instance = new TestRazorPage();
|
||||||
|
|
||||||
|
|
@ -84,12 +87,15 @@ namespace Microsoft.AspNetCore.Mvc.Razor
|
||||||
public void Activate_ThrowsIfTheViewDoesNotDeriveFromRazorViewOfT()
|
public void Activate_ThrowsIfTheViewDoesNotDeriveFromRazorViewOfT()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
|
var modelMetadataProvider = new EmptyModelMetadataProvider();
|
||||||
|
var modelExpressionProvider = new ModelExpressionProvider(modelMetadataProvider, new ExpressionTextCache());
|
||||||
var activator = new RazorPageActivator(
|
var activator = new RazorPageActivator(
|
||||||
new EmptyModelMetadataProvider(),
|
modelMetadataProvider,
|
||||||
new UrlHelperFactory(),
|
new UrlHelperFactory(),
|
||||||
new JsonHelper(new JsonOutputFormatter()),
|
new JsonHelper(new JsonOutputFormatter()),
|
||||||
new DiagnosticListener("Microsoft.AspNetCore"),
|
new DiagnosticListener("Microsoft.AspNetCore"),
|
||||||
new HtmlTestEncoder());
|
new HtmlTestEncoder(),
|
||||||
|
modelExpressionProvider);
|
||||||
|
|
||||||
var instance = new DoesNotDeriveFromRazorPageOfT();
|
var instance = new DoesNotDeriveFromRazorPageOfT();
|
||||||
|
|
||||||
|
|
@ -120,12 +126,16 @@ namespace Microsoft.AspNetCore.Mvc.Razor
|
||||||
public void Activate_InstantiatesNewViewDataDictionaryType_IfTheTypeDoesNotMatch()
|
public void Activate_InstantiatesNewViewDataDictionaryType_IfTheTypeDoesNotMatch()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
|
var modelMetadataProvider = new EmptyModelMetadataProvider();
|
||||||
|
var modelExpressionProvider = new ModelExpressionProvider(modelMetadataProvider, new ExpressionTextCache());
|
||||||
var activator = new RazorPageActivator(
|
var activator = new RazorPageActivator(
|
||||||
new EmptyModelMetadataProvider(),
|
modelMetadataProvider,
|
||||||
new UrlHelperFactory(),
|
new UrlHelperFactory(),
|
||||||
new JsonHelper(new JsonOutputFormatter()),
|
new JsonHelper(new JsonOutputFormatter()),
|
||||||
new DiagnosticListener("Microsoft.AspNetCore.Mvc"),
|
new DiagnosticListener("Microsoft.AspNetCore.Mvc"),
|
||||||
new HtmlTestEncoder());
|
new HtmlTestEncoder(),
|
||||||
|
modelExpressionProvider);
|
||||||
|
|
||||||
var instance = new TestRazorPage();
|
var instance = new TestRazorPage();
|
||||||
|
|
||||||
var myService = new MyService();
|
var myService = new MyService();
|
||||||
|
|
@ -164,12 +174,16 @@ namespace Microsoft.AspNetCore.Mvc.Razor
|
||||||
public void Activate_UsesPassedInViewDataDictionaryInstance_IfPassedInTypeMatches()
|
public void Activate_UsesPassedInViewDataDictionaryInstance_IfPassedInTypeMatches()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
|
var modelMetadataProvider = new EmptyModelMetadataProvider();
|
||||||
|
var modelExpressionProvider = new ModelExpressionProvider(modelMetadataProvider, new ExpressionTextCache());
|
||||||
var activator = new RazorPageActivator(
|
var activator = new RazorPageActivator(
|
||||||
new EmptyModelMetadataProvider(),
|
modelMetadataProvider,
|
||||||
new UrlHelperFactory(),
|
new UrlHelperFactory(),
|
||||||
new JsonHelper(new JsonOutputFormatter()),
|
new JsonHelper(new JsonOutputFormatter()),
|
||||||
new DiagnosticListener("Microsoft.AspNetCore.Mvc"),
|
new DiagnosticListener("Microsoft.AspNetCore.Mvc"),
|
||||||
new HtmlTestEncoder());
|
new HtmlTestEncoder(),
|
||||||
|
modelExpressionProvider);
|
||||||
|
|
||||||
var instance = new TestRazorPage();
|
var instance = new TestRazorPage();
|
||||||
var myService = new MyService();
|
var myService = new MyService();
|
||||||
var helper = Mock.Of<IHtmlHelper<object>>();
|
var helper = Mock.Of<IHtmlHelper<object>>();
|
||||||
|
|
@ -207,12 +221,16 @@ namespace Microsoft.AspNetCore.Mvc.Razor
|
||||||
public void Activate_DeterminesModelTypeFromProperty()
|
public void Activate_DeterminesModelTypeFromProperty()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
|
var modelMetadataProvider = new EmptyModelMetadataProvider();
|
||||||
|
var modelExpressionProvider = new ModelExpressionProvider(modelMetadataProvider, new ExpressionTextCache());
|
||||||
var activator = new RazorPageActivator(
|
var activator = new RazorPageActivator(
|
||||||
new EmptyModelMetadataProvider(),
|
modelMetadataProvider,
|
||||||
new UrlHelperFactory(),
|
new UrlHelperFactory(),
|
||||||
new JsonHelper(new JsonOutputFormatter()),
|
new JsonHelper(new JsonOutputFormatter()),
|
||||||
new DiagnosticListener("Microsoft.AspNetCore.Mvc"),
|
new DiagnosticListener("Microsoft.AspNetCore.Mvc"),
|
||||||
new HtmlTestEncoder());
|
new HtmlTestEncoder(),
|
||||||
|
modelExpressionProvider);
|
||||||
|
|
||||||
var instance = new DoesNotDeriveFromRazorPageOfTButHasModelProperty();
|
var instance = new DoesNotDeriveFromRazorPageOfTButHasModelProperty();
|
||||||
var myService = new MyService();
|
var myService = new MyService();
|
||||||
var helper = Mock.Of<IHtmlHelper<object>>();
|
var helper = Mock.Of<IHtmlHelper<object>>();
|
||||||
|
|
@ -247,12 +265,16 @@ namespace Microsoft.AspNetCore.Mvc.Razor
|
||||||
public void Activate_Throws_WhenViewDataPropertyHasIncorrectType()
|
public void Activate_Throws_WhenViewDataPropertyHasIncorrectType()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
|
var modelMetadataProvider = new EmptyModelMetadataProvider();
|
||||||
|
var modelExpressionProvider = new ModelExpressionProvider(modelMetadataProvider, new ExpressionTextCache());
|
||||||
var activator = new RazorPageActivator(
|
var activator = new RazorPageActivator(
|
||||||
new EmptyModelMetadataProvider(),
|
modelMetadataProvider,
|
||||||
new UrlHelperFactory(),
|
new UrlHelperFactory(),
|
||||||
new JsonHelper(new JsonOutputFormatter()),
|
new JsonHelper(new JsonOutputFormatter()),
|
||||||
new DiagnosticListener("Microsoft.AspNetCore.Mvc"),
|
new DiagnosticListener("Microsoft.AspNetCore.Mvc"),
|
||||||
new HtmlTestEncoder());
|
new HtmlTestEncoder(),
|
||||||
|
modelExpressionProvider);
|
||||||
|
|
||||||
var instance = new HasIncorrectViewDataPropertyType();
|
var instance = new HasIncorrectViewDataPropertyType();
|
||||||
|
|
||||||
var collection = new ServiceCollection();
|
var collection = new ServiceCollection();
|
||||||
|
|
@ -279,12 +301,16 @@ namespace Microsoft.AspNetCore.Mvc.Razor
|
||||||
public void Activate_CanGetUrlHelperFromDependencyInjection()
|
public void Activate_CanGetUrlHelperFromDependencyInjection()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
|
var modelMetadataProvider = new EmptyModelMetadataProvider();
|
||||||
|
var modelExpressionProvider = new ModelExpressionProvider(modelMetadataProvider, new ExpressionTextCache());
|
||||||
var activator = new RazorPageActivator(
|
var activator = new RazorPageActivator(
|
||||||
new EmptyModelMetadataProvider(),
|
modelMetadataProvider,
|
||||||
new UrlHelperFactory(),
|
new UrlHelperFactory(),
|
||||||
new JsonHelper(new JsonOutputFormatter()),
|
new JsonHelper(new JsonOutputFormatter()),
|
||||||
new DiagnosticListener("Microsoft.AspNetCore.Mvc"),
|
new DiagnosticListener("Microsoft.AspNetCore.Mvc"),
|
||||||
new HtmlTestEncoder());
|
new HtmlTestEncoder(),
|
||||||
|
modelExpressionProvider);
|
||||||
|
|
||||||
var instance = new HasUnusualIUrlHelperProperty();
|
var instance = new HasUnusualIUrlHelperProperty();
|
||||||
|
|
||||||
// IUrlHelperFactory should not be used. But set it up to match a real configuration.
|
// IUrlHelperFactory should not be used. But set it up to match a real configuration.
|
||||||
|
|
|
||||||
|
|
@ -148,7 +148,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor
|
||||||
var page = CreatePage(viewContext);
|
var page = CreatePage(viewContext);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var result = page.CreateModelExpression(expression);
|
var result = page.ModelExpressionProvider.CreateModelExpression(page.ViewData, expression);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.NotNull(result);
|
Assert.NotNull(result);
|
||||||
|
|
@ -168,7 +168,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor
|
||||||
var page = CreatePage(viewContext);
|
var page = CreatePage(viewContext);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var result = page.CreateModelExpression(expression);
|
var result = page.ModelExpressionProvider.CreateModelExpression(page.ViewData, expression);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.NotNull(result);
|
Assert.NotNull(result);
|
||||||
|
|
@ -183,6 +183,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor
|
||||||
{
|
{
|
||||||
ViewContext = viewContext,
|
ViewContext = viewContext,
|
||||||
ViewData = (ViewDataDictionary<string>)viewContext.ViewData,
|
ViewData = (ViewDataDictionary<string>)viewContext.ViewData,
|
||||||
|
ModelExpressionProvider = CreateModelExpressionProvider(),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -192,6 +193,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor
|
||||||
{
|
{
|
||||||
ViewContext = viewContext,
|
ViewContext = viewContext,
|
||||||
ViewData = (ViewDataDictionary<RecursiveModel>)viewContext.ViewData,
|
ViewData = (ViewDataDictionary<RecursiveModel>)viewContext.ViewData,
|
||||||
|
ModelExpressionProvider = CreateModelExpressionProvider(),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -201,9 +203,20 @@ namespace Microsoft.AspNetCore.Mvc.Razor
|
||||||
{
|
{
|
||||||
ViewContext = viewContext,
|
ViewContext = viewContext,
|
||||||
ViewData = (ViewDataDictionary<RazorPageCreateModelExpressionModel>)viewContext.ViewData,
|
ViewData = (ViewDataDictionary<RazorPageCreateModelExpressionModel>)viewContext.ViewData,
|
||||||
|
ModelExpressionProvider = CreateModelExpressionProvider(),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static IModelExpressionProvider CreateModelExpressionProvider()
|
||||||
|
{
|
||||||
|
var provider = new TestModelMetadataProvider();
|
||||||
|
var modelExpressionProvider = new ModelExpressionProvider(
|
||||||
|
provider,
|
||||||
|
new ExpressionTextCache());
|
||||||
|
|
||||||
|
return modelExpressionProvider;
|
||||||
|
}
|
||||||
|
|
||||||
private static ViewContext CreateViewContext()
|
private static ViewContext CreateViewContext()
|
||||||
{
|
{
|
||||||
var provider = new TestModelMetadataProvider();
|
var provider = new TestModelMetadataProvider();
|
||||||
|
|
@ -227,16 +240,16 @@ namespace Microsoft.AspNetCore.Mvc.Razor
|
||||||
new HtmlHelperOptions());
|
new HtmlHelperOptions());
|
||||||
}
|
}
|
||||||
|
|
||||||
public class IdentityRazorPage : RazorPage<string>
|
public class IdentityRazorPage : TestRazorPage<string>
|
||||||
{
|
{
|
||||||
public ModelExpression CreateModelExpression1()
|
public ModelExpression CreateModelExpression1()
|
||||||
{
|
{
|
||||||
return CreateModelExpression(m => m);
|
return ModelExpressionProvider.CreateModelExpression(ViewData, m => m);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ModelExpression CreateModelExpression2()
|
public ModelExpression CreateModelExpression2()
|
||||||
{
|
{
|
||||||
return CreateModelExpression(m => Model);
|
return ModelExpressionProvider.CreateModelExpression(ViewData, m => Model);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override Task ExecuteAsync()
|
public override Task ExecuteAsync()
|
||||||
|
|
@ -245,21 +258,21 @@ namespace Microsoft.AspNetCore.Mvc.Razor
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class NotQuiteIdentityRazorPage : RazorPage<RecursiveModel>
|
public class NotQuiteIdentityRazorPage : TestRazorPage<RecursiveModel>
|
||||||
{
|
{
|
||||||
public ModelExpression CreateModelExpression1()
|
public ModelExpression CreateModelExpression1()
|
||||||
{
|
{
|
||||||
return CreateModelExpression(m => m.Model);
|
return ModelExpressionProvider.CreateModelExpression(ViewData, m => m.Model);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ModelExpression CreateModelExpression2()
|
public ModelExpression CreateModelExpression2()
|
||||||
{
|
{
|
||||||
return CreateModelExpression(m => ViewData.Model);
|
return ModelExpressionProvider.CreateModelExpression(ViewData, m => ViewData.Model);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ModelExpression CreateModelExpression3()
|
public ModelExpression CreateModelExpression3()
|
||||||
{
|
{
|
||||||
return CreateModelExpression(m => ViewContext.ViewData.Model);
|
return ModelExpressionProvider.CreateModelExpression(ViewData, m => ViewContext.ViewData.Model);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override Task ExecuteAsync()
|
public override Task ExecuteAsync()
|
||||||
|
|
@ -268,7 +281,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private class TestRazorPage : RazorPage<RazorPageCreateModelExpressionModel>
|
private class TestRazorPage : TestRazorPage<RazorPageCreateModelExpressionModel>
|
||||||
{
|
{
|
||||||
public override Task ExecuteAsync()
|
public override Task ExecuteAsync()
|
||||||
{
|
{
|
||||||
|
|
@ -276,6 +289,16 @@ namespace Microsoft.AspNetCore.Mvc.Razor
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class TestRazorPage<TModel> : RazorPage<TModel>
|
||||||
|
{
|
||||||
|
public IModelExpressionProvider ModelExpressionProvider { get; set; }
|
||||||
|
|
||||||
|
public override Task ExecuteAsync()
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public class RecursiveModel
|
public class RecursiveModel
|
||||||
{
|
{
|
||||||
public RecursiveModel Model { get; set; }
|
public RecursiveModel Model { get; set; }
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,7 @@ using Microsoft.AspNetCore.Mvc.Rendering;
|
||||||
using Microsoft.AspNetCore.Mvc.Routing;
|
using Microsoft.AspNetCore.Mvc.Routing;
|
||||||
using Microsoft.AspNetCore.Mvc.ViewEngines;
|
using Microsoft.AspNetCore.Mvc.ViewEngines;
|
||||||
using Microsoft.AspNetCore.Mvc.ViewFeatures;
|
using Microsoft.AspNetCore.Mvc.ViewFeatures;
|
||||||
|
using Microsoft.AspNetCore.Mvc.ViewFeatures.Internal;
|
||||||
using Microsoft.AspNetCore.Razor.TagHelpers;
|
using Microsoft.AspNetCore.Razor.TagHelpers;
|
||||||
using Microsoft.AspNetCore.Routing;
|
using Microsoft.AspNetCore.Routing;
|
||||||
using Microsoft.Extensions.WebEncoders.Testing;
|
using Microsoft.Extensions.WebEncoders.Testing;
|
||||||
|
|
@ -69,12 +70,15 @@ namespace Microsoft.AspNetCore.Mvc.Razor
|
||||||
|
|
||||||
private static TestRazorPage CreateTestRazorPage()
|
private static TestRazorPage CreateTestRazorPage()
|
||||||
{
|
{
|
||||||
|
var modelMetadataProvider = new EmptyModelMetadataProvider();
|
||||||
|
var modelExpressionProvider = new ModelExpressionProvider(modelMetadataProvider, new ExpressionTextCache());
|
||||||
var activator = new RazorPageActivator(
|
var activator = new RazorPageActivator(
|
||||||
new EmptyModelMetadataProvider(),
|
modelMetadataProvider,
|
||||||
new UrlHelperFactory(),
|
new UrlHelperFactory(),
|
||||||
new JsonHelper(new Formatters.JsonOutputFormatter()),
|
new JsonHelper(new Formatters.JsonOutputFormatter()),
|
||||||
new DiagnosticListener("Microsoft.AspNetCore"),
|
new DiagnosticListener("Microsoft.AspNetCore"),
|
||||||
new HtmlTestEncoder());
|
new HtmlTestEncoder(),
|
||||||
|
modelExpressionProvider);
|
||||||
|
|
||||||
var serviceProvider = new Mock<IServiceProvider>();
|
var serviceProvider = new Mock<IServiceProvider>();
|
||||||
var typeActivator = new TypeActivatorCache();
|
var typeActivator = new TypeActivatorCache();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue