Make uses of ObjectMethodExecutor internal

This commit is contained in:
Pranav K 2017-05-08 16:24:41 -07:00
parent 08965550ad
commit 42a4e9a143
8 changed files with 68 additions and 55 deletions

View File

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

View File

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

View File

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

View File

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

View File

@ -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" />

View File

@ -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" />

View File

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

View File

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