Make uses of ObjectMethodExecutor internal
This commit is contained in:
parent
08965550ad
commit
42a4e9a143
|
|
@ -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;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.ComponentModel;
|
|
||||||
using System.Reflection;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using Microsoft.Extensions.Internal;
|
|
||||||
|
|
||||||
namespace Microsoft.AspNetCore.Mvc.Internal
|
|
||||||
{
|
|
||||||
public static class ControllerActionExecutor
|
|
||||||
{
|
|
||||||
public static object[] PrepareArguments(
|
|
||||||
IDictionary<string, object> actionParameters,
|
|
||||||
ObjectMethodExecutor actionMethodExecutor)
|
|
||||||
{
|
|
||||||
var declaredParameterInfos = actionMethodExecutor.MethodParameters;
|
|
||||||
var count = declaredParameterInfos.Length;
|
|
||||||
if (count == 0)
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
var arguments = new object[count];
|
|
||||||
for (var index = 0; index < count; index++)
|
|
||||||
{
|
|
||||||
var parameterInfo = declaredParameterInfos[index];
|
|
||||||
object value;
|
|
||||||
|
|
||||||
if (!actionParameters.TryGetValue(parameterInfo.Name, out value))
|
|
||||||
{
|
|
||||||
value = actionMethodExecutor.GetDefaultValueForParameter(index);
|
|
||||||
}
|
|
||||||
|
|
||||||
arguments[index] = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
return arguments;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -4,7 +4,6 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.Reflection;
|
|
||||||
using System.Runtime.ExceptionServices;
|
using System.Runtime.ExceptionServices;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Microsoft.AspNetCore.Mvc.Abstractions;
|
using Microsoft.AspNetCore.Mvc.Abstractions;
|
||||||
|
|
@ -38,7 +37,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal
|
||||||
private ResultExecutingContext _resultExecutingContext;
|
private ResultExecutingContext _resultExecutingContext;
|
||||||
private ResultExecutedContext _resultExecutedContext;
|
private ResultExecutedContext _resultExecutedContext;
|
||||||
|
|
||||||
public ControllerActionInvoker(
|
internal ControllerActionInvoker(
|
||||||
IControllerFactory controllerFactory,
|
IControllerFactory controllerFactory,
|
||||||
ParameterBinder parameterBinder,
|
ParameterBinder parameterBinder,
|
||||||
IModelMetadataProvider modelMetadataProvider,
|
IModelMetadataProvider modelMetadataProvider,
|
||||||
|
|
@ -761,7 +760,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal
|
||||||
var executor = _executor;
|
var executor = _executor;
|
||||||
var controller = _controller;
|
var controller = _controller;
|
||||||
var arguments = _arguments;
|
var arguments = _arguments;
|
||||||
var orderedArguments = ControllerActionExecutor.PrepareArguments(arguments, executor);
|
var orderedArguments = PrepareArguments(arguments, executor);
|
||||||
|
|
||||||
var diagnosticSource = _diagnosticSource;
|
var diagnosticSource = _diagnosticSource;
|
||||||
var logger = _logger;
|
var logger = _logger;
|
||||||
|
|
@ -1064,6 +1063,34 @@ namespace Microsoft.AspNetCore.Mvc.Internal
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static object[] PrepareArguments(
|
||||||
|
IDictionary<string, object> actionParameters,
|
||||||
|
ObjectMethodExecutor actionMethodExecutor)
|
||||||
|
{
|
||||||
|
var declaredParameterInfos = actionMethodExecutor.MethodParameters;
|
||||||
|
var count = declaredParameterInfos.Length;
|
||||||
|
if (count == 0)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
var arguments = new object[count];
|
||||||
|
for (var index = 0; index < count; index++)
|
||||||
|
{
|
||||||
|
var parameterInfo = declaredParameterInfos[index];
|
||||||
|
|
||||||
|
if (!actionParameters.TryGetValue(parameterInfo.Name, out var value))
|
||||||
|
{
|
||||||
|
value = actionMethodExecutor.GetDefaultValueForParameter(index);
|
||||||
|
}
|
||||||
|
|
||||||
|
arguments[index] = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
return arguments;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private enum Scope
|
private enum Scope
|
||||||
{
|
{
|
||||||
Resource,
|
Resource,
|
||||||
|
|
|
||||||
|
|
@ -103,7 +103,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal
|
||||||
|
|
||||||
public struct ControllerActionInvokerState
|
public struct ControllerActionInvokerState
|
||||||
{
|
{
|
||||||
public ControllerActionInvokerState(
|
internal ControllerActionInvokerState(
|
||||||
IFilterMetadata[] filters,
|
IFilterMetadata[] filters,
|
||||||
ObjectMethodExecutor actionMethodExecutor)
|
ObjectMethodExecutor actionMethodExecutor)
|
||||||
{
|
{
|
||||||
|
|
@ -113,7 +113,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal
|
||||||
|
|
||||||
public IFilterMetadata[] Filters { get; }
|
public IFilterMetadata[] Filters { get; }
|
||||||
|
|
||||||
public ObjectMethodExecutor ActionMethodExecutor { get; set; }
|
internal ObjectMethodExecutor ActionMethodExecutor { get; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -67,7 +67,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal
|
||||||
|
|
||||||
var cacheState = _controllerActionInvokerCache.GetState(controllerContext);
|
var cacheState = _controllerActionInvokerCache.GetState(controllerContext);
|
||||||
|
|
||||||
context.Result = new ControllerActionInvoker(
|
var invoker = new ControllerActionInvoker(
|
||||||
_controllerFactory,
|
_controllerFactory,
|
||||||
_parameterBinder,
|
_parameterBinder,
|
||||||
_modelMetadataProvider,
|
_modelMetadataProvider,
|
||||||
|
|
@ -76,6 +76,8 @@ namespace Microsoft.AspNetCore.Mvc.Internal
|
||||||
controllerContext,
|
controllerContext,
|
||||||
cacheState.Filters,
|
cacheState.Filters,
|
||||||
cacheState.ActionMethodExecutor);
|
cacheState.ActionMethodExecutor);
|
||||||
|
|
||||||
|
context.Result = invoker;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,7 @@ Microsoft.AspNetCore.Mvc.RouteAttribute</Description>
|
||||||
<PackageReference Include="Microsoft.Extensions.FileProviders.Abstractions" Version="$(AspNetCoreVersion)" />
|
<PackageReference Include="Microsoft.Extensions.FileProviders.Abstractions" Version="$(AspNetCoreVersion)" />
|
||||||
<PackageReference Include="Microsoft.Extensions.HashCodeCombiner.Sources" Version="$(AspNetCoreVersion)" PrivateAssets="All" />
|
<PackageReference Include="Microsoft.Extensions.HashCodeCombiner.Sources" Version="$(AspNetCoreVersion)" PrivateAssets="All" />
|
||||||
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="$(AspNetCoreVersion)" />
|
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="$(AspNetCoreVersion)" />
|
||||||
<PackageReference Include="Microsoft.Extensions.ObjectMethodExecutor.Sources" Version="2.0.0-preview2-24958" />
|
<PackageReference Include="Microsoft.Extensions.ObjectMethodExecutor.Sources" Version="$(AspNetCoreVersion)" PrivateAssets="All" />
|
||||||
<PackageReference Include="Microsoft.Extensions.PlatformAbstractions" Version="$(AspNetCoreVersion)" />
|
<PackageReference Include="Microsoft.Extensions.PlatformAbstractions" Version="$(AspNetCoreVersion)" />
|
||||||
<PackageReference Include="Microsoft.Extensions.PropertyActivator.Sources" Version="$(AspNetCoreVersion)" PrivateAssets="All" />
|
<PackageReference Include="Microsoft.Extensions.PropertyActivator.Sources" Version="$(AspNetCoreVersion)" PrivateAssets="All" />
|
||||||
<PackageReference Include="Microsoft.Extensions.PropertyHelper.Sources" Version="$(AspNetCoreVersion)" PrivateAssets="All" />
|
<PackageReference Include="Microsoft.Extensions.PropertyHelper.Sources" Version="$(AspNetCoreVersion)" PrivateAssets="All" />
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,7 @@ Microsoft.AspNetCore.Mvc.ViewComponent</Description>
|
||||||
<PackageReference Include="Microsoft.AspNetCore.Html.Abstractions" Version="$(AspNetCoreVersion)" />
|
<PackageReference Include="Microsoft.AspNetCore.Html.Abstractions" Version="$(AspNetCoreVersion)" />
|
||||||
<PackageReference Include="Microsoft.Extensions.ClosedGenericMatcher.Sources" Version="$(AspNetCoreVersion)" PrivateAssets="All" />
|
<PackageReference Include="Microsoft.Extensions.ClosedGenericMatcher.Sources" Version="$(AspNetCoreVersion)" PrivateAssets="All" />
|
||||||
<PackageReference Include="Microsoft.Extensions.CopyOnWriteDictionary.Sources" Version="$(AspNetCoreVersion)" PrivateAssets="All" />
|
<PackageReference Include="Microsoft.Extensions.CopyOnWriteDictionary.Sources" Version="$(AspNetCoreVersion)" PrivateAssets="All" />
|
||||||
|
<PackageReference Include="Microsoft.Extensions.ObjectMethodExecutor.Sources" Version="$(AspNetCoreVersion)" PrivateAssets="All" />
|
||||||
<PackageReference Include="Microsoft.Extensions.HashCodeCombiner.Sources" Version="$(AspNetCoreVersion)" PrivateAssets="All" />
|
<PackageReference Include="Microsoft.Extensions.HashCodeCombiner.Sources" Version="$(AspNetCoreVersion)" PrivateAssets="All" />
|
||||||
<PackageReference Include="Microsoft.Extensions.PropertyActivator.Sources" Version="$(AspNetCoreVersion)" PrivateAssets="All" />
|
<PackageReference Include="Microsoft.Extensions.PropertyActivator.Sources" Version="$(AspNetCoreVersion)" PrivateAssets="All" />
|
||||||
<PackageReference Include="Microsoft.Extensions.PropertyHelper.Sources" Version="$(AspNetCoreVersion)" PrivateAssets="All" />
|
<PackageReference Include="Microsoft.Extensions.PropertyHelper.Sources" Version="$(AspNetCoreVersion)" PrivateAssets="All" />
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@
|
||||||
// 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 System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Runtime.ExceptionServices;
|
using System.Runtime.ExceptionServices;
|
||||||
|
|
@ -102,7 +103,7 @@ namespace Microsoft.AspNetCore.Mvc.ViewComponents
|
||||||
|
|
||||||
using (_logger.ViewComponentScope(context))
|
using (_logger.ViewComponentScope(context))
|
||||||
{
|
{
|
||||||
var arguments = ControllerActionExecutor.PrepareArguments(context.Arguments, executor);
|
var arguments = PrepareArguments(context.Arguments, executor);
|
||||||
|
|
||||||
_diagnosticSource.BeforeViewComponent(context, component);
|
_diagnosticSource.BeforeViewComponent(context, component);
|
||||||
_logger.ViewComponentExecuting(context, arguments);
|
_logger.ViewComponentExecuting(context, arguments);
|
||||||
|
|
@ -145,9 +146,7 @@ namespace Microsoft.AspNetCore.Mvc.ViewComponents
|
||||||
|
|
||||||
using (_logger.ViewComponentScope(context))
|
using (_logger.ViewComponentScope(context))
|
||||||
{
|
{
|
||||||
var arguments = ControllerActionExecutor.PrepareArguments(
|
var arguments = PrepareArguments(context.Arguments, executor);
|
||||||
context.Arguments,
|
|
||||||
executor);
|
|
||||||
|
|
||||||
_diagnosticSource.BeforeViewComponent(context, component);
|
_diagnosticSource.BeforeViewComponent(context, component);
|
||||||
_logger.ViewComponentExecuting(context, arguments);
|
_logger.ViewComponentExecuting(context, arguments);
|
||||||
|
|
@ -204,5 +203,32 @@ namespace Microsoft.AspNetCore.Mvc.ViewComponents
|
||||||
typeof(IHtmlContent).Name,
|
typeof(IHtmlContent).Name,
|
||||||
typeof(IViewComponentResult).Name));
|
typeof(IViewComponentResult).Name));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static object[] PrepareArguments(
|
||||||
|
IDictionary<string, object> parameters,
|
||||||
|
ObjectMethodExecutor objectMethodExecutor)
|
||||||
|
{
|
||||||
|
var declaredParameterInfos = objectMethodExecutor.MethodParameters;
|
||||||
|
var count = declaredParameterInfos.Length;
|
||||||
|
if (count == 0)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
var arguments = new object[count];
|
||||||
|
for (var index = 0; index < count; index++)
|
||||||
|
{
|
||||||
|
var parameterInfo = declaredParameterInfos[index];
|
||||||
|
|
||||||
|
if (!parameters.TryGetValue(parameterInfo.Name, out var value))
|
||||||
|
{
|
||||||
|
value = objectMethodExecutor.GetDefaultValueForParameter(index);
|
||||||
|
}
|
||||||
|
|
||||||
|
arguments[index] = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
return arguments;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -37,7 +37,7 @@ namespace Microsoft.AspNetCore.Mvc.ViewFeatures.Internal
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public ObjectMethodExecutor GetViewComponentMethodExecutor(ViewComponentContext viewComponentContext)
|
internal ObjectMethodExecutor GetViewComponentMethodExecutor(ViewComponentContext viewComponentContext)
|
||||||
{
|
{
|
||||||
var cache = CurrentCache;
|
var cache = CurrentCache;
|
||||||
var viewComponentDescriptor = viewComponentContext.ViewComponentDescriptor;
|
var viewComponentDescriptor = viewComponentContext.ViewComponentDescriptor;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue