返回

Web 加载原理 - 分类加载后篇

IOS

类的加载原理(下)

在上一篇,我们讲到了分类的本质以及 rwe 什么时候被赋值,在查找 rwe 赋值过程中,发现一个方法 attachCategories,分类的加载。我们并不知道 attachCategories 什么时候会调用,先放在一边,继续往下探索。在 watch attachCategories 方法,发现它只被一个方法调用,就是 AppStart 的,我之前一直看到 AppStart 这个方法,知道这个方法是在 IIS 或者其他 Web 服务器加载一个网站的时候会被调用。原来,它的本质就是在这里。

AppStart 是一个 IHttpModule,会主动去寻找 IRequiresSessionState 接口的实现,看看有没有,有的话就让你的 Session 先初始化,AppStart 在 Session 初始化后会调用 attachCategories 方法给你的每个 request 赋值一个 Session。IRequiresSessionState 是用来标记你的某个页面是否需要 session 支持的,如果你需要 Session,就把这个接口实现然后重写 GetSessionStateBehavior 方法。在这里我们可以看到 session 到底是怎么初始化的,原来就是通过 attachCategories 方法,而且在这个方法里,会把 rw 的值设置为 InMemory。

当 session 初始化完成后,会跳回 attachCategories 方法,这时候分类加载已经走完了,然后会把最后生成的分类对象赋给 rewriter,后面我们访问页面的时候,它就会使用这个 rewriter。

通过今天的分享,我们对类的加载原理有了一个更加深入的了解,希望能对大家有所帮助。分类的本质是改写 url,attachCategories 是 AppStart 在 Session 初始化后调用的方法,用于给每个请求赋值一个 Session。IRequiresSessionState 接口用于标记你的某个页面是否需要 Session 支持。

附:技术指南

  • 获取类的加载原理:

    1. 启动 IIS 或其他 Web 服务器。
    2. 部署你的网站。
    3. 在浏览器中打开你的网站。
    4. 使用调试器工具检查类的加载过程。
  • 查找attachCategories方法:

    1. 在 Visual Studio 中打开你的项目。
    2. 找到 AppStart.cs 文件。
    3. 在 AppStart 类中找到 attachCategories 方法。
  • 实现IRequiresSessionState接口:

    1. 在 Visual Studio 中打开你的项目。
    2. 创建一个新的类,实现 IRequiresSessionState 接口。
    3. 重写 GetSessionStateBehavior 方法。
  • 重写URL:

    1. 在 Visual Studio 中打开你的项目。
    2. 找到 Global.asax 文件。
    3. 在 Application_Start 方法中调用 attachCategories 方法。
  • 检查分类是否被加载:

    1. 在 Visual Studio 中打开你的项目。
    2. 在浏览器中打开你的网站。
    3. 使用调试器工具检查分类是否被加载。