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.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.ExceptionServices;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc.Abstractions;
@ -38,7 +37,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal
private ResultExecutingContext _resultExecutingContext;
private ResultExecutedContext _resultExecutedContext;
public ControllerActionInvoker(
internal ControllerActionInvoker(
IControllerFactory controllerFactory,
ParameterBinder parameterBinder,
IModelMetadataProvider modelMetadataProvider,
@ -761,7 +760,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal
var executor = _executor;
var controller = _controller;
var arguments = _arguments;
var orderedArguments = ControllerActionExecutor.PrepareArguments(arguments, executor);
var orderedArguments = PrepareArguments(arguments, executor);
var diagnosticSource = _diagnosticSource;
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
{
Resource,

View File

@ -103,7 +103,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal
public struct ControllerActionInvokerState
{
public ControllerActionInvokerState(
internal ControllerActionInvokerState(
IFilterMetadata[] filters,
ObjectMethodExecutor actionMethodExecutor)
{
@ -113,7 +113,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal
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);
context.Result = new ControllerActionInvoker(
var invoker = new ControllerActionInvoker(
_controllerFactory,
_parameterBinder,
_modelMetadataProvider,
@ -76,6 +76,8 @@ namespace Microsoft.AspNetCore.Mvc.Internal
controllerContext,
cacheState.Filters,
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.HashCodeCombiner.Sources" Version="$(AspNetCoreVersion)" PrivateAssets="All" />
<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.PropertyActivator.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.Extensions.ClosedGenericMatcher.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.PropertyActivator.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.
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.ExceptionServices;
@ -102,7 +103,7 @@ namespace Microsoft.AspNetCore.Mvc.ViewComponents
using (_logger.ViewComponentScope(context))
{
var arguments = ControllerActionExecutor.PrepareArguments(context.Arguments, executor);
var arguments = PrepareArguments(context.Arguments, executor);
_diagnosticSource.BeforeViewComponent(context, component);
_logger.ViewComponentExecuting(context, arguments);
@ -145,9 +146,7 @@ namespace Microsoft.AspNetCore.Mvc.ViewComponents
using (_logger.ViewComponentScope(context))
{
var arguments = ControllerActionExecutor.PrepareArguments(
context.Arguments,
executor);
var arguments = PrepareArguments(context.Arguments, executor);
_diagnosticSource.BeforeViewComponent(context, component);
_logger.ViewComponentExecuting(context, arguments);
@ -204,5 +203,32 @@ namespace Microsoft.AspNetCore.Mvc.ViewComponents
typeof(IHtmlContent).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 viewComponentDescriptor = viewComponentContext.ViewComponentDescriptor;