c# – asp.net mvc 2控制器如何实例化?

前端之家收集整理的这篇文章主要介绍了c# – asp.net mvc 2控制器如何实例化?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
当asp.net应用程序被通知URL时,它会将其路由到适当的控制器,特别是适当的方法.

这些控制器是否放置在堆栈一次?还是再次为每个请求实例化?

例如,说我有一个控制器,在一个类的声明中被实例化了一个linq-to-sql类.如果我有n个请求路由到该控制器,我是否生成了不同的linq-to-sql类对象,每个对象在自己的控制器实例中或只有1个?

我的直觉告诉我,由于线程安全原因,控制人员每个请求产生一个控制器,但是似乎没有比我自己的胃肠道恶魔挖掘更好的指南.

解决方法

默认情况下,它们每次都被DefaultControllerFactory实例化.具体来说,在GetControllerInstance中,
(IController)Activator.CreateInstance(controllerType);

首先调用CreateController,它调用GetControllerType来根据控制器名称和路由数据令牌中传递的Namespaces获取控制器类型.然后它调用GetControllerInstance,它创建一个控制器的实例.

没有比MVC framework source code itself更好的指南.

您可以通过实现IControllerFactory定义您自己的ControllerFactory,然后控制控制器的实例化和何时.

猜你在找的C#相关文章