zoukankan      html  css  js  c++  java
  • 新建一个controller并指定为默认的方法

    在之前的项目中升级了MVC的DLL导致一开始程序运行时走的controller的有参构造方法变为走无参构造方法,但是该controller没有无参的构造方法,为了强制让程序走有参的构造方法,就在global文件的Application_Start()方法中写入了如下代码

     IControllerFactory factory = new CustomControllerFactory();
                ControllerBuilder.Current.SetControllerFactory(factory);

    其中

    CustomControllerFactory 代码如下:

      public class CustomControllerFactory:IControllerFactory
        {
            public IController CreateController(System.Web.Routing.RequestContext requestContext, string controllerName)
            {
                DataSettings setting = new DataSettings();
                var controller = new HomeController(setting);
                return controller;
            }
            public System.Web.SessionState.SessionStateBehavior GetControllerSessionBehavior(
               System.Web.Routing.RequestContext requestContext, string controllerName)
            {
                return SessionStateBehavior.Default;
            }
            public void ReleaseController(IController controller)
            {
                IDisposable disposable = controller as IDisposable;
                if (disposable != null)
                    disposable.Dispose();
            }
        }
    }

    这样当时是强制程序走home的有参方法,home有几个参数,就传入几个参数,但是问题来了,如果你在程序中并不想让程序一开始就走home,比如我的程序要先走个激活的controller然后再走home,那么就算你使用了redirect去跳转到激活的 AuthorizeController,,他还是会去走home,不会去调到你指定的controller,但是后来发现不走有参的controller是因为引用升级的原因,全部系统的DLL升级后问题消失了,这段代码就没有存在的意义了,实际上,创建一个普通的类,继承IController后,上面的代码可以变动成

    var controller = new Testt();
    其中
    Testt就是新建的类。简单的归纳一下,还希望大家补充IController,IControllerFactory,。以及程序中出现不走有参构造函数的时候如何强制去执行的建议
  • 相关阅读:
    快速幂 快速乘法
    扩展欧几里得学习笔记
    求逆序数数目(树状数组+离散化)
    隐式图的遍历
    随机数生成
    推倒重来
    动态规划初步
    子集生成
    东大oj1155 等凹函数
    P1278 单词游戏
  • 原文地址:https://www.cnblogs.com/llcdbk/p/6917618.html
Copyright © 2011-2022 走看看