c# – asp.net mvc 2控制器如何实例化?
发布时间:2020-12-15 17:42:43 所属栏目:百科 来源:网络整理
导读:当asp.net应用程序被通知URL时,它会将其路由到适当的控制器,特别是适当的方法. 这些控制器是否放置在堆栈一次?还是再次为每个请求实例化? 例如,说我有一个控制器,在一个类的声明中被实例化了一个linq-to-sql类.如果我有n个请求路由到该控制器,我是否生成了
当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,然后控制控制器的实例化和何时. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |