新建一个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,。以及程序中出现不走有参构造函数的时候如何强制去执行的建议
时间: 2024-10-28 16:10:14

新建一个controller并指定为默认的方法的相关文章

springboot入门一,使用myEclipse新建一个springboot项目

1.环境信息 MyEclipse2015,jdk1.8,tomcat8 2.新建maven项目 2.1 新建一个web项目 2.2 生成的项目结构如下 3.配置pom.xml文件 3.1 pom.xml完整信息 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http

WCF入门随笔 (一). 新建一个WCF服务

1. 新建服务 (1). [文件]--[新建项目]--[WCF服务应用程序] (2). 将默认生成的IService1.cs和Service1.svc文件删除掉 (3). 添加自定义的WCF[服务文件]Math.svc,此时vs2012会自动生成WCF接口文件IMath.cs,我们在IMath中定义WCF方法Add,在Math.svc.cs对该接口的方法进行实现. IMath.cs文件 1 namespace WCFService 2 { 3 [ServiceContract] 4 public

新建一个登录,找回密码,注册页面的工程,使用控制器实现三个页面的跳转

新建一个工程,关闭ARC ,  AppDelegate.h 中window属性strong改成retain APPDelegate.m中window 初始化时加autorelease     上面重写dealloc方法 建一个UIViewController 的子类 RootViewController 把建好的三个页面添加到控制器默认视图上,并加上页面中按钮的触发跳转事件 ,设置APPDelegate.m中window 的根控制器为RootViewController 具体代码 UILabel

新建一个用户,让他只能看到某一个视图(View),如何设置

新建一个用户,让他只能看到某一个视图(View),怎么设置? 新建一个用户,让他只能看到某一个视图(View),怎么设置? 如果做不到“只能看到指定视图”,最好能做到“对指定表或视图只有查询的权限”. 谢谢!------解决思路----------------------在指定权限时只对视图授权 USE [master] GO CREATE LOGIN [Test] WITH PASSWORD=N'1', DEFAULT_DATABASE=[DB], CHECK_EXPIRATION=OFF, 

管理员技术(六): 硬盘分区及格式化、 新建一个逻辑卷、调整现有磁盘的分区、扩展逻辑卷的大小、添加一个swap分区

一.硬盘分区及格式化 问题: 本例要求熟悉硬盘分区结构,使用fdisk分区工具在磁盘 /dev/vdb 上按以下要求建立分区: 1> 采用默认的 msdos 分区模式        2> 第1个分区 /dev/vdb1 的大小为 200MiB        3> 第2个分区 /dev/vdb2 的大小为 2000MiB        4> 第3个分区 /dev/vdb3 的大小为 1000MiB 完成分区后,能够配置开机自动挂载 /dev/vdb2 分区: 1> 文件系统类型

运用Keil uVision新建一个工程

关于单片机程序来说,每一个功用程序,都必需要有一个配套的工程(Project),即便是点亮 LED 如许复杂的功用程序也不破例,因而我们起首要新建一个工程,翻开我们的 Keil 软件后,点击:Project-->New uVision Project...然后会呈现一个新建工程的界面,如图 2-8 所示. 图 2-8  新建一个工程 由于如今讲到了第二章,所以我们在硬盘上树立了一个 lesson2 的目次,然后把 LED 这个工程的途径指定到这里,如许便利往后治理程序,分歧的功用程序放到分歧的文

使用VMware新建一个Linux系统虚拟机

我们将其分为两步,1:新建虚拟机:2:安装Red Hat Enterprse Linux 6操作系统 1.首先我们新建一个虚拟机,先不安装操作系统,稍后再对其安装Linux系统. 新建虚拟机步骤如下: 打开VMware软件,菜单栏点击“文件(F)”–>选择“新建虚拟机(N)”,如下图1,(或者直接点击图中“+”号所在的位置) 选择新建后出现如下界面,如图2,此处我们选择自定义,然后点击下一步. 图3,此处直接下一步. 图4,此处选择“稍后安装操作系统”,然后下一步. 图5,选择Linux系统,版

SpringMVC实现一个controller写多个方法

MultiActionController与ParameterMethodNameResolver在一个Controller类中定义多个方法,并根据使用者的请求来执行当中的某个方法,相当于Struts的DispatcherAction.使用MultiActionController需要配个MethodNameResolver实例,默认使用ParameterMethodNameResolver,他会根据所给的网址中,最后请求的文件名称来判断执行Controller中的哪一个方法 1.控制器类继承M

Spring中用@Component、@Repository、@Service和 @Controller等标注的默认Bean名称会是小写开头的非限定类名

今天用调度平台去调用bean中的方法时,提示找不到bean.经查,发现是由于如果在标注上没有提供name属性值,则默认的bean名称是小写开头的,而不是大写开头的. 下面是其他文档参阅: 使用过滤器自定义扫描 <context:component-scan base-package="org.example"> spring开发手册中这样写: 3.12.4. 自动检测组件的命名 当一个组件在某个扫描过程中被自动检测到时,会根据那个扫描器的BeanNameGenerator