public override ValueTask <IActionResult> Execute( IActionResultTypeMapper mapper, ObjectMethodExecutor executor, object controller, object[] arguments) { executor.Execute(controller, arguments); return(new ValueTask <IActionResult>(new EmptyResult())); }
public override ValueTask <IActionResult> Execute( IActionResultTypeMapper mapper, ObjectMethodExecutor executor, object controller, object[] arguments) { var actionResult = (IActionResult)executor.Execute(controller, arguments); EnsureActionResultNotNull(executor, actionResult); return(new ValueTask <IActionResult>(actionResult)); }
public override ValueTask <IActionResult> Execute( IActionResultTypeMapper mapper, ObjectMethodExecutor executor, object controller, object[] arguments) { // Sync method returning arbitrary object var returnValue = executor.Execute(controller, arguments); var actionResult = ConvertToActionResult(mapper, returnValue, executor.MethodReturnType); return(new ValueTask <IActionResult>(actionResult)); }
public override async ValueTask <IActionResult> Execute( IActionResultTypeMapper mapper, ObjectMethodExecutor executor, object controller, object[] arguments) { // Async method returning awaitable-of-IActionResult (e.g., Task<ViewResult>) // We have to use ExecuteAsync because we don't know the awaitable's type at compile time. var actionResult = (IActionResult)await executor.ExecuteAsync(controller, arguments); EnsureActionResultNotNull(executor, actionResult); return(actionResult); }
public static ActionMethodExecutor GetExecutor(ObjectMethodExecutor executor) { for (var i = 0; i < Executors.Length; i++) { if (Executors[i].CanExecute(executor)) { return(Executors[i]); } } Debug.Fail("Should not get here"); throw new Exception(); }
public override async ValueTask <IActionResult> Execute( IActionResultTypeMapper mapper, ObjectMethodExecutor executor, object controller, object[] arguments) { // Async method returning awaitable-of-nonvoid var returnValue = await executor.ExecuteAsync(controller, arguments); var actionResult = ConvertToActionResult(mapper, returnValue, executor.AsyncResultType); return(actionResult); }
public override async ValueTask <IActionResult> Execute( IActionResultTypeMapper mapper, ObjectMethodExecutor executor, object controller, object[] arguments) { // Async method returning Task<IActionResult> // Avoid extra allocations by calling Execute rather than ExecuteAsync and casting to Task<IActionResult>. var returnValue = executor.Execute(controller, arguments); var actionResult = await(Task <IActionResult>) returnValue; EnsureActionResultNotNull(executor, actionResult); return(actionResult); }
internal MyControllerActionInvokerCacheEntry( FilterItem[] cachedFilters, Func <ControllerContext, object> controllerFactory, Action <ControllerContext, object> controllerReleaser, ControllerBinderDelegate controllerBinderDelegate, ObjectMethodExecutor objectMethodExecutor, ActionMethodExecutor actionMethodExecutor) { ControllerFactory = controllerFactory; ControllerReleaser = controllerReleaser; ControllerBinderDelegate = controllerBinderDelegate; CachedFilters = cachedFilters; ObjectMethodExecutor = objectMethodExecutor; ActionMethodExecutor = actionMethodExecutor; }
protected override bool CanExecute(ObjectMethodExecutor executor) => true;
protected override bool CanExecute(ObjectMethodExecutor executor) => executor.MethodReturnType == typeof(Task);
protected override bool CanExecute(ObjectMethodExecutor executor) => !executor.IsMethodAsync && typeof(IActionResult).IsAssignableFrom(executor.MethodReturnType);
protected override bool CanExecute(ObjectMethodExecutor executor) { // Async method returning void return(executor.IsMethodAsync && executor.AsyncResultType == typeof(void)); }
protected override bool CanExecute(ObjectMethodExecutor executor) => !executor.IsMethodAsync && executor.MethodReturnType == typeof(void);
protected override bool CanExecute(ObjectMethodExecutor executor) => typeof(Task <IActionResult>).IsAssignableFrom(executor.MethodReturnType);
protected abstract bool CanExecute(ObjectMethodExecutor executor);
public abstract ValueTask <IActionResult> Execute( IActionResultTypeMapper mapper, ObjectMethodExecutor executor, object controller, object[] arguments);
// Catch-all for sync methods protected override bool CanExecute(ObjectMethodExecutor executor) => !executor.IsMethodAsync;
protected override bool CanExecute(ObjectMethodExecutor executor) { // Async method returning awaitable-of - IActionResult(e.g., Task<ViewResult>) return(executor.IsMethodAsync && typeof(IActionResult).IsAssignableFrom(executor.AsyncResultType)); }