我记录开源系统1.6源码解析(一)

我记录给我的感觉还可以,毕竟大部分是出自一人之手,能做到这样已经很不错,下面我来一步步尝试分析它是如何实现如

此强大的功能的。

首先从Global.asax开始,这是应用程序开始的地方,可以看到Application_Start这个方法。我们可以先从这个方法入手。

        wojilu.Web.SystemInfo.Init();//系统的固定数据,比如网站根路径,app路径,主机(ip+端口号)名称等。这里的信息是以后路由的参考信息,在以后Url和实际地址映射的时候将用到这里的数据


首先分析wojilu.Web.SystemInfo.Init()方法,该方法在SystemInfo这个类下,属于静态方法可以直接由类调用。

public static void Init() {

           if (_hasInitialized) return;

           lock (_objLock) {
               if (_hasInitialized) return;
               SystemInfo obj = SystemInfo.Instance;
               _hasInitialized = true;
           }
       }

简单的几行却做了很多工作,if(_hasInitialized)判断是否已经初始化,如果已经初始化就返回不执行下面的代码,lock代码片段应该是控制并发操作的,通过锁住某个对象(_objLock),_objLock对象定义如下:

private static Object _objLock = new Object();


关键在于

SystemInfo obj = SystemInfo.Instance;


此代码调用了SystemInfo的静态成员Instance

public static SystemInfo Instance = loadSystemInfo();


这里又调用了loadSystemInfo方法。主要就是loadSystemInfo这个方法了。我们把目光转移到此方法上就好。

private static SystemInfo loadSystemInfo() {

           SystemInfo obj = new SystemInfo();

           if (IsWeb) {
               obj.applicationPath = HttpContext.Current.Request.ApplicationPath;//用在映射文件绝对路径
               obj.rootPath = addEndSlash( obj.applicationPath );
               obj.host = HttpContext.Current.Request.Url.Host;
           }
           else {
               obj.applicationPath = "/";
               obj.rootPath = "/";
               obj.host = "localhost";
           }

           return obj;

       }

首先初始化SystemInfo实例,结果返回该实例,代码很简单,就给实例的属性赋值,包括:applicationPath,rootPath,hostPath,用于系统初始化。addEndSlash方

法定义如下:

private static String addEndSlash( String appPath ) {
           if (!appPath.EndsWith( "/" )) return appPath + "/";
           return appPath;
       }

很简单,就是返回以“/”结束的字符串。

wojilu.Web.SystemInfo.Init()方法就解析到这,接下来我们会解析

wojilu.Web.Mvc.MvcFilterLoader.Init();


这个重要的方法,该方法会把我们导向Web.Config中和本系统相关的很多重要的功能。

转载于:https://www.cnblogs.com/johnwonder/archive/2012/01/13/2322059.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值