新建一个controller并指定为默认的方法

本文介绍了一个关于ASP.NET MVC项目中升级DLL后导致控制器构造方法调用错误的问题及解决方案。通过自定义`IControllerFactory`实现来确保特定构造方法被调用,并讨论了在不同场景下如何正确配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在之前的项目中升级了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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值