本章内容是讲三种开发模式,web模式、Winform模式和Wcf模式的系统启动入口有什么区别,以及启动后系统初始化的内容;为什么要把这些单独提出来讲一章,因为我觉得本章非常重要,我们都知道程序中的main()函数,称之为主函数,是所有程序运行的入口;当你拿着一个程序肯定是从这个函数开始阅读,慢慢的深入了解整个程序的运行流程;而光看那些功能代码块是掌握不了系统运行时的一些机制的;
只有掌握本章的内容后,那么在以后项目中遇到的问题基本上都能直接定位,并找到产生的原因,不然你会觉得所有产生的问题都莫名其妙,不知道从哪里下手调试;项目中的配置文件也是在系统初始化中使用的,要了解配置的值到底有什么作用也必须搞清楚系统初始化的过程,还有就是框架中的很多设计思想就是基于此处产生的,最典型的就是控制器的设计,为什么控制器要如此设计,看完后应该会深有体会;
接下来我就分别对框架中的几种模式的系统启动入口进行讲解:
1.Web版系统启动入口
2.Winform版系统启动入口
3.Wcf版系统启动入口
4.启动后初始化内容
源代码目录结构:
Web版是三层结构程序,但跟wcf版又不一样,分为浏览器、Web服务器和数据库,所有代码都是部署在Web服务器上的,Windows下的常用web服务器就是IIS了;Net下的web系统启动入口通常都是使用Global.asax文件;是可以把初始化代码AppGlobal放在此文件中,但是框架为什么没有这么做,因为开始的设计就是在EFWWeb项目中是不能写任何cs代码的,想想看如果EFWWeb项目没有cs代码,那么就只有html代码和javascript代码,这样EFWWeb项目就不需要编译,要编译的代码都放在逻辑层项目中,我们发布就变得非常方便,只需拷贝更新逻辑层项目的dll和EFWWeb项目的aspx文件和js文件;如果只修改了界面那编译都不用了;
那么启动入口不在Global.asax文件中那又在哪了,框架利用了httpModules来实现;先看AppGlobalHttpModule对象的代码,继承net框架中的IHttpModule接口,在实现的Init方法中通过context.BeginRequest事件调用了AppGlobal.AppStart方法实现系统初始化;
1 /// <summary> 2 /// web系统启动调用此对象 3 /// </summary> 4 public class AppGlobalHttpModule : IHttpModule 5 { 6 7 #region IHttpModule 成员 8 9 public void Dispose() 10 { 11 AppGlobal.AppEnd(); 12 } 13 private HttpApplication _context; 14 public void Init(HttpApplication context) 15 { 16 _context = context; 17 context.BeginRequest += new EventHandler(context_BeginRequest); 18 } 19 20 void context_BeginRequest(object sender, EventArgs e) 21 { 22 AppGlobal.AppRootPath = _context.Server.MapPath("~/"); 23 AppGlobal.AppStart(AppGlobalType.Web); 24 } 25 26 #endregion 27 }