private async Task <IViewComponentResult> InvokeAsyncCore(ViewComponentContext context) { var component = _viewComponentFactory.CreateViewComponent(context); using (_logger.ViewComponentScope(context)) { var method = context.ViewComponentDescriptor.MethodInfo; var arguments = ControllerActionExecutor.PrepareArguments(context.Arguments, method.GetParameters()); var methodExecutor = _viewComponentInvokerCache.GetViewComponentMethodExecutor(context); _diagnosticSource.BeforeViewComponent(context, component); _logger.ViewComponentExecuting(context, arguments); var startTimestamp = _logger.IsEnabled(LogLevel.Debug) ? Stopwatch.GetTimestamp() : 0; var result = await ControllerActionExecutor.ExecuteAsync(methodExecutor, component, arguments); var viewComponentResult = CoerceToViewComponentResult(result); _logger.ViewComponentExecuted(context, startTimestamp, viewComponentResult); _diagnosticSource.AfterViewComponent(context, viewComponentResult, component); _viewComponentFactory.ReleaseViewComponent(context, component); return(viewComponentResult); } }
private async Task <IViewComponentResult> InvokeAsyncCore( MethodInfo method, ViewComponentContext context) { if (method == null) { throw new ArgumentNullException(nameof(method)); } if (context == null) { throw new ArgumentNullException(nameof(context)); } var component = CreateComponent(context); using (_logger.ViewComponentScope(context)) { _diagnosticSource.BeforeViewComponent(context, component); _logger.ViewComponentExecuting(context); var startTime = Environment.TickCount; var result = await ControllerActionExecutor.ExecuteAsync(method, component, context.Arguments); var viewComponentResult = CoerceToViewComponentResult(result); _logger.ViewComponentExecuted(context, startTime, viewComponentResult); _diagnosticSource.AfterViewComponent(context, viewComponentResult, component); return(viewComponentResult); } }
private async Task <IViewComponentResult> InvokeAsyncCore(ObjectMethodExecutor executor, ViewComponentContext context) { var component = _viewComponentFactory.CreateViewComponent(context); using (_logger.ViewComponentScope(context)) { var arguments = PrepareArguments(context.Arguments, executor); _diagnosticSource.BeforeViewComponent(context, component); _logger.ViewComponentExecuting(context, arguments); var stopwatch = ValueStopwatch.StartNew(); object resultAsObject; var returnType = executor.MethodReturnType; if (returnType == typeof(Task <IViewComponentResult>)) { resultAsObject = await(Task <IViewComponentResult>) executor.Execute(component, arguments); } else if (returnType == typeof(Task <string>)) { resultAsObject = await(Task <string>) executor.Execute(component, arguments); } else if (returnType == typeof(Task <IHtmlContent>)) { resultAsObject = await(Task <IHtmlContent>) executor.Execute(component, arguments); } else { resultAsObject = await executor.ExecuteAsync(component, arguments); } var viewComponentResult = CoerceToViewComponentResult(resultAsObject); _logger.ViewComponentExecuted(context, stopwatch.GetElapsedTime(), viewComponentResult); _diagnosticSource.AfterViewComponent(context, viewComponentResult, component); _viewComponentFactory.ReleaseViewComponent(context, component); return(viewComponentResult); } }
private async Task <IViewComponentResult> InvokeAsyncCore(ObjectMethodExecutor executor, ViewComponentContext context) { var component = _viewComponentFactory.CreateViewComponent(context); using (_logger.ViewComponentScope(context)) { var arguments = ControllerActionExecutor.PrepareArguments(context.Arguments, executor); _diagnosticSource.BeforeViewComponent(context, component); _logger.ViewComponentExecuting(context, arguments); var startTimestamp = _logger.IsEnabled(LogLevel.Debug) ? Stopwatch.GetTimestamp() : 0; object resultAsObject = null; var taskGenericType = executor.TaskGenericType; if (taskGenericType == typeof(IViewComponentResult)) { resultAsObject = await(Task <IViewComponentResult>) executor.Execute(component, arguments); } else if (taskGenericType == typeof(string)) { resultAsObject = await(Task <string>) executor.Execute(component, arguments); } else if (taskGenericType == typeof(IHtmlContent)) { resultAsObject = await(Task <IHtmlContent>) executor.Execute(component, arguments); } else { resultAsObject = await executor.ExecuteAsync(component, arguments); } var viewComponentResult = CoerceToViewComponentResult(resultAsObject); _logger.ViewComponentExecuted(context, startTimestamp, viewComponentResult); _diagnosticSource.AfterViewComponent(context, viewComponentResult, component); _viewComponentFactory.ReleaseViewComponent(context, component); return(viewComponentResult); } }