MvcApplication 中方法的那点事
最近比较闲,不知道干点啥,想找兼职没有合适的,不找工资又不够花,o(︶︿︶)o 唉!
说多了都是泪,入正题吧。
首先,新建一个MVC4.0项目,建好之后打开Global.asax文件,在MVCApplication类中,只有一个方法Application_Start(),咱们就从它说起。
Application_Start
这是初始的代码:
1 protected void Application_Start() 2 { 3 AreaRegistration.RegisterAllAreas(); 4 RouteConfig.RegisterRoutes(RouteTable.Routes); 5 }
这个方法是不是很熟悉,这个方法是第一个请求进来之后最先运行、且只运行一次。
但是请看它还有好几个“兄弟姐妹”:
1 protected void Application_Start(object sender, EventArgs e) 2 { 3 Debug.WriteLine("B: Application_Start(object sender, EventArgs e)"); 4 } 5 6 protected void Application_OnStart() 7 { 8 Debug.WriteLine("C: Application_OnStart()"); 9 10 } 11 protected void Application_OnStart(object sender, EventArgs e) 12 { 13 Debug.WriteLine("D: Application_OnStart(object sender, EventArgs e)"); 14 }
如果把他们放在一起会怎样,都会运行?都不运行?还是报错?Or只运行一个?是哪个? 详细答案在这里
我在这里只说一下结果:这四个方法一起存在的话,只会运行第四个Application_OnStart(object sender,EventArgs e),注释了第四个,会运行第三个,依此类推,优先级最低的是建项目自带的那个。
另外,我发现一个有趣的现象,在Application_Start方法中添加BeginRequest事件时,直接运行会报错,
如代码所示:
1 protected void Application_Start() 2 { 3 Debug.WriteLine("A: Application_Start()"); 4 AreaRegistration.RegisterAllAreas(); 5 6 WebApiConfig.Register(GlobalConfiguration.Configuration); 7 FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 8 RouteConfig.RegisterRoutes(RouteTable.Routes); 9 BundleConfig.RegisterBundles(BundleTable.Bundles); 10 this.BeginRequest += MvcApplication_BeginRequest; 11 //this.EndRequest += MvcApplication_EndRequest; 12 } 13 14 private void MvcApplication_BeginRequest(object sender, EventArgs e) 15 { 16 Debug.WriteLine("MvcApplication_BeginRequest"); 17 }
但是,加上 管道事件就没问题了,如代码:
1 protected void Application_Start() 2 { 3 Debug.WriteLine("A: Application_Start()"); 4 AreaRegistration.RegisterAllAreas(); 5 6 WebApiConfig.Register(GlobalConfiguration.Configuration); 7 FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 8 RouteConfig.RegisterRoutes(RouteTable.Routes); 9 BundleConfig.RegisterBundles(BundleTable.Bundles); 10 this.BeginRequest += MvcApplication_BeginRequest; 11 //this.EndRequest += MvcApplication_EndRequest; 12 } 13 14 private void MvcApplication_BeginRequest(object sender, EventArgs e) 15 { 16 Debug.WriteLine("MvcApplication_BeginRequest"); 17 } 18 protected void Application_BeginRequest(object sender, EventArgs e) 19 { 20 Debug.WriteLine("at application_beginRequest :what's the sender type:{0}", sender.GetType()); 21 Debug.WriteLine("MvcApplication_BeginRequest"); 22 }
【未完待续】
不清楚为什么,有知道的麻烦告诉下,另外表述能力很差劲,请多谅解。