internal static IControllerFactory Proxy(this IControllerFactory iControllerFactory, IGlimpseLogger logger) { if (iControllerFactory.CanSupportDynamicProxy(logger)) { var proxyConfig = new Dictionary <string, IInterceptor> { { "CreateController", new CreateControllerInterceptor(logger) } }; var proxyGenerator = new ProxyGenerator(); var proxyGenOptions = new ProxyGenerationOptions(new SimpleProxyGenerationHook(logger, proxyConfig.Keys.ToArray())) { Selector = new SimpleInterceptorSelector(proxyConfig) }; var newInvoker = (IControllerFactory)proxyGenerator.CreateClassProxy(iControllerFactory.GetType(), proxyGenOptions, proxyConfig.Values.ToArray()); return(newInvoker); } logger.Warn("Unable to proxy {0}", iControllerFactory.GetType()); return(iControllerFactory); //if (iControllerFactory is GlimpseControllerFactory) return iControllerFactory; //return new GlimpseControllerFactory(iControllerFactory, logger); }
private void ProcessRequestInit(HttpContextBase httpContext, out IController controller, out IControllerFactory factory) { // If request validation has already been enabled, make it lazy. This allows attributes like [HttpPost] (which looks // at Request.Form) to work correctly without triggering full validation. // Tolerate null HttpContext for testing. HttpContext currentContext = HttpContext.Current; if (currentContext != null) { bool?isRequestValidationEnabled = ValidationUtility.IsValidationEnabled(currentContext); if (isRequestValidationEnabled == true) { ValidationUtility.EnableDynamicValidation(currentContext); } } AddVersionHeader(httpContext); RemoveOptionalRoutingParameters(); // Get the controller type string controllerName = RequestContext.RouteData.GetRequiredString("controller"); // Instantiate the controller and call Execute factory = ControllerBuilder.GetControllerFactory(); controller = factory.CreateController(RequestContext, controllerName); if (controller == null) { throw new InvalidOperationException( String.Format( CultureInfo.CurrentCulture, MvcResources.ControllerBuilder_FactoryReturnedNull, factory.GetType(), controllerName)); } }
protected internal virtual IAsyncResult BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, object state) { AddVersionHeader(httpContext); // Get the controller type string controllerName = RequestContext.RouteData.GetRequiredString("controller"); // Instantiate the controller and call Execute IControllerFactory factory = ControllerBuilder.GetControllerFactory(); IController controller = factory.CreateController(RequestContext, controllerName); if (controller == null) { throw new InvalidOperationException( String.Format( CultureInfo.CurrentUICulture, MvcResources.ControllerBuilder_FactoryReturnedNull, factory.GetType(), controllerName)); } BeginExecuteDelegate beginExecute; EndExecuteDelegate endExecute; IAsyncController asyncController = controller as IAsyncController; if (asyncController != null) { beginExecute = asyncController.BeginExecute; endExecute = asyncController.EndExecute; } else { // execute synchronous controller asynchronously ExecuteDelegate executeDelegate = rc => SynchronizationContext.Sync(() => controller.Execute(rc)); beginExecute = executeDelegate.BeginInvoke; endExecute = executeDelegate.EndInvoke; } BeginInvokeCallback beginCallback = (innerCallback, innerState) => { try { return(beginExecute(RequestContext, innerCallback, innerState)); } catch { factory.ReleaseController(controller); throw; } }; AsyncCallback endCallback = ar => { try { endExecute(ar); } finally { factory.ReleaseController(controller); } }; return(AsyncResultWrapper.Wrap(callback, state, beginCallback, endCallback, _processRequestTag)); }
public ControllerFactoryProvider( IControllerActivatorProvider activatorProvider, IControllerFactory controllerFactory, #pragma warning disable PUB0001 // Pubternal type in public API IEnumerable <IControllerPropertyActivator> propertyActivators #pragma warning restore PUB0001 ) { if (activatorProvider == null) { throw new ArgumentNullException(nameof(activatorProvider)); } if (controllerFactory == null) { throw new ArgumentNullException(nameof(controllerFactory)); } _activatorProvider = activatorProvider; // Compat: Delegate to the IControllerFactory if it's not the default implementation. if (controllerFactory.GetType() != typeof(DefaultControllerFactory)) { _factoryCreateController = controllerFactory.CreateController; _factoryReleaseController = controllerFactory.ReleaseController; } _propertyActivators = propertyActivators.ToArray(); }
protected internal virtual void ProcessRequest(HttpContextBase httpContext) { AddVersionHeader(httpContext); // Get the controller type string controllerName = RequestContext.RouteData.GetRequiredString("controller"); // Instantiate the controller and call Execute IControllerFactory factory = ControllerBuilder.GetControllerFactory(); IController controller = factory.CreateController(RequestContext, controllerName); if (controller == null) { throw new InvalidOperationException( String.Format( CultureInfo.CurrentUICulture, MvcResources.ControllerBuilder_FactoryReturnedNull, factory.GetType(), controllerName)); } try { controller.Execute(RequestContext); } finally { factory.ReleaseController(controller); } }
public ControllerFactoryProvider( IControllerActivatorProvider activatorProvider, IControllerFactory controllerFactory, IEnumerable <IControllerPropertyActivator> propertyActivators) { if (activatorProvider == null) { throw new ArgumentNullException(nameof(activatorProvider)); } if (controllerFactory == null) { throw new ArgumentNullException(nameof(controllerFactory)); } _activatorProvider = activatorProvider; // Compat: Delegate to the IControllerFactory if it's not the default implementation. if (controllerFactory.GetType() != typeof(DefaultControllerFactory)) { _factoryCreateController = controllerFactory.CreateController; _factoryReleaseController = controllerFactory.ReleaseController; _factoryReleaseControllerAsync = controllerFactory.ReleaseControllerAsync; } _propertyActivators = propertyActivators.ToArray(); }
public void DefaultControllerFactoryIsDefaultControllerFactory() { // Arrange ControllerBuilder builder = new ControllerBuilder(); // Act IControllerFactory returnedControllerFactory = builder.GetControllerFactory(); //Assert Assert.Equal(typeof(DefaultControllerFactory), returnedControllerFactory.GetType()); }
public static ControllerBase GetControllerByName(this HtmlHelper htmlHelper, string controllerName) { IControllerFactory factory = ControllerBuilder.Current.GetControllerFactory(); IController controller = factory.CreateController(htmlHelper.ViewContext.RequestContext, controllerName); if (controller == null) { throw new InvalidOperationException( String.Format( CultureInfo.CurrentCulture, "The IControllerFactory '{0}' did not return a controller for the name '{1}'. Controller not Found.", factory.GetType(), controllerName)); } return((ControllerBase)controller); }
static ControllerBase GetControllerByName(HtmlHelper helper, string controllerName) { IControllerFactory factory = ControllerBuilder.Current.GetControllerFactory(); IController controller = factory.CreateController(helper.ViewContext.RequestContext, controllerName); if (controller == null) { throw new InvalidOperationException( string.Format( System.Globalization.CultureInfo.CurrentUICulture, "Controller factory {0} controller {1} returned null", factory.GetType(), controllerName)); } return((ControllerBase)controller); }
internal static bool CanSupportDynamicProxy(this IControllerFactory controllerFactory, IGlimpseLogger logger) { //Make sure there is a parameterless constructor and the type is not sealed var controllerFactoryType = controllerFactory.GetType(); var proxy = controllerFactory as IProxyTargetAccessor; var defaultConstructor = controllerFactoryType.GetConstructor(new Type[] { }); var result = (!controllerFactoryType.IsSealed && defaultConstructor != null && proxy == null); if (!result) { //TODO: Add logging } return(result); }
private static ControllerBase GetControllerByName(HtmlHelper helper, string controllerName) { // Instantiate the controller and call Execute IControllerFactory factory = ControllerBuilder.Current.GetControllerFactory(); IController controller = factory.CreateController(helper.ViewContext.RequestContext, controllerName); if (controller == null) { throw new InvalidOperationException( String.Format( CultureInfo.CurrentUICulture, "Controller factory {0} controller {1} returned null", factory.GetType(), controllerName)); } return((ControllerBase)controller); }
private void ProcessRequestInit(HttpContextBase httpContext, out IController controller, out IControllerFactory factory) { AddVersionHeader(httpContext); RemoveOptionalRoutingParameters(); // Get the controller type string controllerName = RequestContext.RouteData.GetRequiredString("controller"); // Instantiate the controller and call Execute factory = ControllerBuilder.GetControllerFactory(); controller = factory.CreateController(RequestContext, controllerName); if (controller == null) { throw new InvalidOperationException( String.Format( CultureInfo.CurrentUICulture, MvcResources.ControllerBuilder_FactoryReturnedNull, factory.GetType(), controllerName)); } }
public void ProcessRequestInternal(HttpContextBase httpContext) { AddVersionHeader(httpContext); string requiredString = RequestContext.RouteData.GetRequiredString("controller"); IControllerFactory controllerFactory = ControllerBuilder.Current.GetControllerFactory(); IController controller = controllerFactory.CreateController(RequestContext, requiredString); if (controller == null) { throw new InvalidOperationException(string.Format(CultureInfo.CurrentUICulture, "The IControllerFactory '{0}' did not return a controller for a controller named '{1}'.", new object[] { controllerFactory.GetType(), requiredString })); } try { ((ControllerBase)controller).ValidateRequest = _validateRequest; controller.Execute(RequestContext); } finally { controllerFactory.ReleaseController(controller); } }
private static ControllerBase GetControllerByName(ViewContext viewContext, string controllerName, bool useNamespaceFallback) { // Instantiate the controller and call Execute IControllerFactory factory = ControllerBuilder.Current.GetControllerFactory(); if (useNamespaceFallback) { viewContext.RequestContext.RouteData.DataTokens["UseNamespaceFallback"] = true; } IController controller = factory.CreateController(viewContext.RequestContext, controllerName); if (controller == null) { throw new InvalidOperationException( String.Format( CultureInfo.CurrentUICulture, "Controller factory {0} controller {1} returned null", factory.GetType(), controllerName)); } return((ControllerBase)controller); }
/// <summary> /// 通过Http上下文对象创建对应的controller工厂和controller /// </summary> /// <param name="httpContext">封装的Http上下文</param> /// <param name="controller">返回当前请求的controller实例</param> /// <param name="factory">返回controller工厂实例</param> private void ProcessRequestInit(HttpContextBase httpContext, out IController controller, out IControllerFactory factory) { // If request validation has already been enabled, make it lazy. This allows attributes like [HttpPost] (which looks // at Request.Form) to work correctly without triggering full validation. // Tolerate null HttpContext for testing. HttpContext currentContext = HttpContext.Current; if (currentContext != null) { bool? isRequestValidationEnabled = ValidationUtility.IsValidationEnabled(currentContext); if (isRequestValidationEnabled == true) { ValidationUtility.EnableDynamicValidation(currentContext); } } // 在响应头中返回MVC的版本号信息 如:X-AspNetMvc-Version 5.0 AddVersionHeader(httpContext); // 移除路由数据中的可选项Optional RemoveOptionalRoutingParameters(); // 获取当前请求的控制器名称 // Get the controller type string controllerName = RequestContext.RouteData.GetRequiredString("controller"); // 通过工厂创建controller的实例 // Instantiate the controller and call Execute factory = ControllerBuilder.GetControllerFactory(); controller = factory.CreateController(RequestContext, controllerName); if (controller == null) { throw new InvalidOperationException( String.Format( CultureInfo.CurrentCulture, MvcResources.ControllerBuilder_FactoryReturnedNull, factory.GetType(), controllerName)); } }
private void ProcessRequestInit(HttpContextBase httpContext, out IController controller, out IControllerFactory factory) { AddVersionHeader(httpContext); RemoveOptionalRoutingParameters(); // Get the controller type string controllerName = RequestContext.RouteData.GetRequiredString("controller"); // Instantiate the controller and call Execute factory = ControllerBuilder.GetControllerFactory(); controller = factory.CreateController(RequestContext, controllerName); if (controller == null) { throw new InvalidOperationException( String.Format( CultureInfo.CurrentUICulture, MvcResources.ControllerBuilder_FactoryReturnedNull, factory.GetType(), controllerName)); } }