在ASP.NET应用启动的时候初始化的几种方法
ASP.NET 4.0 之前,有两种方法:通过Global.asax 中的 Application_Start 事件启动,或者通过定义在 App_Code 文件夹中任意类中的AppInitialize 静态方法。方法的原型定义如下:
public static void AppInitialize()
AppInitialize 方法是 ASP.NET 中一个特殊的方法,在网站应用程序启动之后进行初始化的时候将被首先调用。这个方法只能出现一次,只能出现在 App_Code 中定义的一个类中,如果出现在两个类中,ASP.NET 将会报编译错误。这个方法甚至不能定义在一个程序集中定义的类中。
在ASP.NET 4.0中,有一个很有趣的特色:Pre Application Start Method,新增的Pre Application Start Method机制则稍微改变了这个流程(原本在ASP.NET中,当应用程序起始时首先被请求的是Global.asax中的Application_Start函数),当某个Assembly标示了PreApplicationStar Method Attribute后,ASP.NET会在应用程序起始时呼叫指定的函式,这个动作发生在Global.asax中的Application_Start之前,而且是自动扫描BIN目录中的的Assemblys来进行的。具体可以参考ASP.NET 4.0 – Pre Application Start Method。
总结一下,有三种方法可以用来初始化ASP.NET应用程序:
1、在Global.asax中的Application_Start函数里完成初始化,这个也是用的最多的,不具体说明了。
2、在App_Code 文件夹中任意类中的AppInitialize 静态方法. App_Code目录是一个非常特殊的目录,特殊到很多规则你都不知道,ASP.NET对这个目录的文件会做一些特殊的处理。就比如AppInitialize静态方法的执行规则:
- AppInitialize静态方法必须是在App_Code目录下。
- AppInitialize静态方法在App_Code目录下不允许被定义两次。
- AppInitialize方法在编译时就被特殊处理了,不能再外部的应用程序集dll里定义。
3、在PreApplicationStartMethod 我们在上边初始化之前完成网站的初始化,这样,我们可以在一个类库项目中使用这个特征来标记需要在网站中提前初始化的方法。具体可以参考ASP.NET 4.0 – Pre Application Start Method。
- 浅谈强化学习的方法及学习路线
- 【亲测有效】Win10家庭版Microsoft Edge页面出现乱码的两种解决方案及gpedit.msc命令无法使用的解决策略
- Fiddler抓包7-post请求(json)
- Selenium2+python自动化56-unittest之断言(assert)
- 长文 | 手把手教你如何使用python进行数据分析(最好将文章代码自己码一遍)
- 回归与梯度下降法及实现原理
- 【宅男宅女们的福音】电影天堂最新电影爬取及搜索脚本
- 把模块有关联的放在一个文件夹中 在python2中调用文件夹名会直接失败 在python3中调用会成功,但是调用不能成功的解决方案
- numpy用法小结
- 凯撒密码加解密及破解实现原理
- linux bash Shell脚本经典 Fork炸弹演示及命令详解
- python易错盲点排查之+=与+的区别分析以及一些赋值运算踩过的坑
- Selenium2+python自动化57-捕获异常(NoSuchElementException)
- 你真的会用ABAP, Java和JavaScript里的constructor么?
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Linux下docker制作springboot应用镜像
- 行为型设计模式:备忘录模式
- 行为型设计模式:访问者模式
- redis实战第十篇 集群收缩
- redis实战第九篇 集群扩容自动迁移槽(redis-cli)
- 自动化运维| Ansible playbook的逻辑控制语句
- Windows通用应用平台UWP持久化
- redis实战第八篇 集群扩容 手动迁移槽
- Xinetd服务的安装与配置详解
- redis实战第七篇 使用redis工具(redis-cli)搭建redis cluster
- 使用ROS2机器人操作系统进行多机器人编程技术实践(Multi-Robot Programming Via ROS2 )
- 自动化运维实践 | Ansible playbook重用
- 手把手教你打造高效的 Kubernetes 命令行终端
- docker save load export import的区别
- 使用ABAC控制数据访问