新建一个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,。以及程序中出现不走有参构造函数的时候如何强制去执行的建议
原文地址:https://www.cnblogs.com/llcdbk/p/6917618.html