MvcApplication类(Global).doc_第1页
MvcApplication类(Global).doc_第2页
MvcApplication类(Global).doc_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

源码阅读MvcApplication类(Global)global.asax文件的作用:1.定义Application级别,Session级别的变量,对象和数据;即定义全局变量。2.定义在Application中的,基于Application,Session的事件;当改动global.asax文件时,Asp.Net 会检测到这个文件的改变,将处理完现有的所有Request后,触发Application_OnEnd()事件,然后重新启动Application。上面的处理过程,会重置整个站点,清除Session和其它存储的信息;当有新的Request到达时,Asp.Net 会重新编译global.asax文件,触发Application_OnEnd()事件。所以,如果要更改global.asax文件,应该在站点不繁忙时做。关于global.asax文件要注意的几点:global.asax文件存在于站点的根目录;每个站点只允许有1个global.asax文件;当对站点资源的第一次请求时, 会将global.asax文件编译为一个类(继承自HttpApplication类);global.asax文件是自配置的,处于安全目的,不允许外部通过Url访问;六月 1 2012 12:38 下午 作者:admin793 阅读Tags:源码本文主要关注Orchard的Global.asax文件。我们先简单回顾一下ASP.NET应用程序的生命周期,当然这里只关注部分。通过ASP.NET 应用程序生命周期我们知道,当 ASP.NET (在 IIS 7.0 集成模式下为统一管道Unified Pipeline)接收到对应用程序中任何资源的第一个请求时,名为 ApplicationManager 的类会创建一个应用程序域。在应用程序域中,将为名为 HostingEnvironment 的类创建一个实例,该实例提供对有关应用程序的信息(如应用程序的物理路径、虚拟目录等),然后 ASP.NET 将会为当前请求创建并初始化核心的应用程序对象,如 HttpContext、HttpRequest 和 HttpResponse。然后,将通过创建 HttpApplication 类的实例启动应用程序。 如果应用程序具有 Global.asax 文件,则 ASP.NET 会创建 Global.asax 类(从 HttpApplication 类派生)的一个实例,并使用该派生类表示应用程序。比如创建了默认的Global.asax文件,将会同时生成一个名为Global.asax.cs的Codebehind文件。Global.asax.cs文件包含一个继承自HttpApplication类的,名为Global的类。而ASP.NET要创建的类将会是名为ASP.global_asax,其中ASP是命名空间。global_asax类继承自Global类。它们的继承层次为:global_asax - Global - HttpApplication 。对于Orchard,Global.asax文件对应的Global.asax.cs文件中,类命名为MvcApplication而不是默认的Global。MvcApplication处理了三个事件Start,BeginRequest和EndRequest,分别对应Application_Start、Application_BeginRequest和Application_EndRequest事件处理程序(方法)。Start是个特殊事件,在请求 ASP.NET 应用程序中第一个资源(如aspx页)时调用。在应用程序的生命周期期间仅调用一次 该事件对应的事件处理程序,即Application_Start 方法。可用于在应用程序启动期间应仅设置静态共享数据。BeginRequest事件在 ASP.NET 响应请求时作为 HTTP 执行管线链中的第一个事件发生。事件处理方法一般使用Application_BeginRequest方法作为事件处理程序。可以通过重写HttpApplication的Init方法注册其他名称的时间处理程序。EndRequest事件在 ASP.NET 响应请求时作为 HTTP 执行管线链中的最后一个事件发生。事件处理方法一般使用Application_EndRequest方法作为事件处理程序。也可以通过重写HttpApplication的Init方法注册其他名称的时间处理程序。备注:是否真有名为Start的事件还不明确。先来看Application_Start方法。在Orchard中,Application_Start方法首先调用了RegisterRoutes方法,添加了一个路由配置,将对后缀为.axd文件的请求排除在ASP.NET MVC处理管道之外。Application_Start方法使用泛型参数IOrchardHost(暂时不管IOrchardHost是什么)创建了一个Orchard.WarmupStarter.Starter实例并赋给了静态私有字段_starter。Starter类型有唯一的构造函数,接受三个委托参数: public Starter(Func initialization, Action beginRequest, Action endRequest) _initialization = initialization; _beginRequest = beginRequest; _endRequest = endRequest; 所以MvcHttpApplication还准备了三个方法:IOrchardHost HostInitialization(HttpApplication application)void HostBeginRequest(HttpApplication application, IOrchardHost host)void HostEndRequest(HttpApplication application, IOrchardHost host)HostInitialization方法接受一个HttpApplication型参数返回一个IOrchadHost型对象;HostBeginRequest和HostEndRequest方法接受一个HttpApplication型参数和一个IOrchardHost型参数,无返回值。Starter类的构造函数内部只是简单的赋值操作,将参数值赋给局部变量。创建_starter对象后,调用Starter类的OnApplicationStart方法,将当前的MvcHttpApplication实例作为参数传入。_starter.OnApplicationStart(this);OnApplicationStart方法最终会回过头来调用MvcHttpApplication类中的HostInitialization方法,即作为参数传给Starter构造函数的委托所包装的方法。再来看Application_BeginRequest方法。该方法只是简单的调用_starter的相关方法:_starter.OnBeginRequest(this);OnBeginRequest方法最终会回过头来调用MvcHttpApplication类中的HostBeginRequest方法,即作为参数传给Starter构造函数的委托所包装的方法。和Application_BeginRequest方法类似,Application_EndRequest方法也只是简单的调用_starter的相关方法:_starter.OnEndRequest(this);OnEndRequest方法最终会回过头来调用MvcHttpApplication类中的HostEndRequest方法,即作为参数传给Starter构造函数的委托所包装的方法。MvcHttpApplication类中还有一个MvcSingletons方法。主要目的是将ASP.NET MVC的路由表,模型绑定器和视图引擎以单例的形式在Autofac容器中进行注册,这里暂不详述。从上面的分析,看起来Starter类是个懒惰的类,几乎没做什么事。虽然叫了让它工作,它却又甩回来让MvcHttpApplication来做了实际上并不完全是这样。以后的文章中我们将详细分析Starter类。MvcHttpApplication也并不是个勤快的家伙,它把Starter类丢回来的工作让给OrchardStarter类(创建IOrchardHost实例)或者IOrchadHost接口的实现类来做了。对MvcHttpApplication分析暂时就到这里,它虽然就短短60多行代码,而且包括注释。但留给我们的疑问倒却不少:1、HostInitialization方法中,调用了OrchardStarter.CreateHost方法。它的作用通过方法名称不难看出是IOrchardHost实例的,但它是如何创建IOrchardHost实例的?2、HostInitialization方法中,调用IOrchardHost.Initialize方法后,为什么还要调用BeginRequest和EndRequest方法?3、上面虽然数次提到IOrch

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论