zoukankan      html  css  js  c++  java
  • Mvc如何重写控制器工厂!

    直接上代码,主要看红色文字,在这里根据自己项目需求获取到控制器的type。

        public class CustomControllerFactory : DefaultControllerFactory
        {
            /// <summary>
            /// 根据控制器名称及请求信息获得控制器类型。
            /// </summary>
            /// <param name="requestContext">请求信息</param>
            /// <param name="controllerName">控制器名称。</param>
            /// <returns>控制器类型。</returns>
            protected override Type GetControllerType(RequestContext requestContext, string controllerName)
            {
                Type controllerType = null;
                //路由中包含pluginName才重写, 反射动态加载的控制器必须重写控制器工厂。
                if (requestContext.RouteData.Values.ContainsKey("pluginName"))
                {
                    string pluginName = requestContext.RouteData.Values["pluginName"].ToString();
                    controllerType = this.GetControllerType(pluginName, controllerName);
                }
                else
                {
                    controllerType = base.GetControllerType(requestContext, controllerName);
                    if (controllerType != null)
                    {
                        if (requestContext.RouteData.DataTokens.ContainsKey("Namespaces"))
                        {
                            string[] nameSpaces = (string[])requestContext.RouteData.DataTokens["Namespaces"];
                            //把默认优先级改为直接限制
                            if (!nameSpaces.Contains(controllerType.Namespace))
                            {
                                return null;
                            }
                        }
                    }
                }
                return controllerType;
            }
    .....
    

    重写必须继承DefaultControllerFactory,然后在启动时候注册,注册方式,可以在global文件的Application_Start()中注册,代码如下:

    ControllerBuilder.Current.SetControllerFactory(new CustomControllerFactory()); //重新注册控制器工厂
    

    也可以通过特性自启动,代码如下:

    [assembly: System.Web.PreApplicationStartMethod(typeof(PageAdmin.Plugin.Bootstrapper), "Initialize")]
    namespace PageAdmin.Plugin
    {
        /// <summary>
        /// 引导程序。
        /// </summary>
        public static class Bootstrapper
        {
            /// <summary>
            /// 初始化。
            /// </summary>
            public static void Initialize()
            {
                //注册插件控制器工厂。
                ControllerBuilder.Current.SetControllerFactory(new PluginControllerFactory());
    ............... } } }
  • 相关阅读:
    mysql修改表
    MySQL sql优化(摘抄自文档)
    mysql show操作
    mysql load data infile
    mysql Insert强化
    mysql group_concat
    HTML js 复习
    mysql开发实战8问
    不使用Ajax,如何实现表单提交不刷新页面
    跨域的方式总结
  • 原文地址:https://www.cnblogs.com/huaguo/p/8202563.html
Copyright © 2011-2022 走看看