PreApplicationStartMethod特性说明
PreApplicationStartMethod主要用于为程序集指定一个方法,在程序集加载时进行一些自定义的初始化处理。
使用方式如下所示,首先在程序集中定义一个公共类型和一个公共静态的方法

然后我们使用PreApplicationStartMethod属性注册该方法进行程序集的预处理,注意PreApplicationStartMethod只能注册当前程序集中的类型中的方法进行预处理,而且该类型必须为public,改方法必须为public static。

接着我们按照上述步骤新建多个相同的项目

最后我们新建一个空的MVC项目,引用这些类库项目,对程序集进行测试

运行程序,可以看到Class1、Class2、Class3中的Run方法依次执行



Global文件中的事件,如Application_Start,会在他们执行完之后执行

如上所示,当前Web项目引用了三个类库项目,那么他们各自的预处理代码的执行顺序有什么规律呢?
查看MSDN上PreApplicationStartMethodAttribute类型的说明,可以看到我们无法控制代码的处理顺序,编译预处理代码出,必须保持代码的独立性,使预处理代码的执行顺序不会影响程序的运行。
另外,如果当前Web项目也存在预处理代码,那么,外部引用的程序集的预处理代码与Web项目中的预处理代码,那个会优先执行呢?
新建Class4如下所示,并注册Run方法进行预处理

运行站点,可以看到,Class4中的Run方法会在外部引用的程序集中的预处理程序执行完毕之后执行,Class4.Run执行完毕后才会执行Global文件中的相关事件代码。
因为预处理的代码会在程序第一次运行,加载程序集的时候执行。所以在MVC5与Katana项目中就是使用PreApplicationStartMethod特性进行HttpModule的动态注册的。
PreApplicationStartMethod特性说明的更多相关文章
- Fis3的前端工程化之路[三大特性篇之声明依赖]
Fis3版本:v3.4.22 Fis3的三大特性 资源定位:获取任何开发中所使用资源的线上路径 内容嵌入:把一个文件的内容(文本)或者base64编码(图片)嵌入到另一个文件中 依赖声明:在一个文本文 ...
- Fis3的前端工程化之路[三大特性篇之资源定位]
Fis3版本:v3.4.22 Fis3的三大特性 资源定位:获取任何开发中所使用资源的线上路径 内容嵌入:把一个文件的内容(文本)或者base64编码(图片)嵌入到另一个文件中 依赖声明:在一个文本文 ...
- Fis3的前端工程化之路[三大特性篇之内容嵌入]
Fis3版本:v3.4.22 Fis3的三大特性 资源定位:获取任何开发中所使用资源的线上路径 内容嵌入:把一个文件的内容(文本)或者base64编码(图片)嵌入到另一个文件中 依赖声明:在一个文本文 ...
- .NET 4.6.2正式发布带来众多特性
虽然大多数人的注意力都集中在.NET Core上,但与原来的.NET Framework相关的工作还在继续..NET Framework 4.6.2正式版已于近日发布,其重点是安全和WinForms/ ...
- SQL Server 2014 新特性——内存数据库
SQL Server 2014 新特性——内存数据库 目录 SQL Server 2014 新特性——内存数据库 简介: 设计目的和原因: 专业名词 In-Memory OLTP不同之处 内存优化表 ...
- 探索ASP.NET MVC5系列之~~~4.模型篇---包含模型常用特性和过度提交防御
其实任何资料里面的任何知识点都无所谓,都是不重要的,重要的是学习方法,自行摸索的过程(不妥之处欢迎指正) 汇总:http://www.cnblogs.com/dunitian/p/4822808.ht ...
- InnoDB关键特性学习笔记
插入缓存 Insert Buffer Insert Buffer是InnoDB存储引擎关键特性中最令人激动与兴奋的一个功能.不过这个名字可能会让人认为插入缓冲是缓冲池中的一个组成部分.其实不然,Inn ...
- ElasticSearch 5学习(10)——结构化查询(包括新特性)
之前我们所有的查询都属于命令行查询,但是不利于复杂的查询,而且一般在项目开发中不使用命令行查询方式,只有在调试测试时使用简单命令行查询,但是,如果想要善用搜索,我们必须使用请求体查询(request ...
- HTML5新特性有哪些,你都知道吗
一.画布(Canvas) 画布是网页中的一块区域,可所以用JavaScript在上面绘图.下面我们来创建一个画布并在上面绘制一个坦克(后面将用HTML5做一个坦克大战游戏),代码如下: <!DO ...
随机推荐
- switch表达式、case穿透
记得第一次学switch的时候那是还是学习c语言的时候,整体的写if-else,switch,现在回想起来已经是很多年前的事了,好了今天让我们再来回顾下简单的switch 语法 switch(n) { ...
- WPF EventAggregator(基于EventAggregator的事件发布及订阅)
一.EventAggregator简介 EventAggregator是Prism中专门处理ViewModel与ViewModel之间事件传递的类对象,它提供了针对事件的发布方法和订阅方法,所以可以非 ...
- vue 获取数据联动下拉框select ,并解决报Duplicate value found in v-for="...": "". Use track-by="$index" 错误
公司项目中遇到一个问题,联动下拉框,并且数据是使用vue-resource从后台获取的,格式不利于输出联动下拉框,联动下拉框是第一个下拉框输出一个数组里每一项json的一个text值,从而第二下拉框输 ...
- Delphi下OpenGL2d绘图(04)-画四边形
一.前言 画四边形基本上与前几遍文字代码是相同.区别在于glBegin()的参数“GL_QUADS”.绘制的框架代码可以使用 Delphi下OpenGL2d绘图(01)-初始化 中的代码.修改的部份为 ...
- shell获取时间的相关命令
Linux shell获取时间和时间间隔(ms级别) 说明:在进行一些性能测试的时候,有时候我们希望能计算一个程序运行的时间,有时候可能会自己写一个shell脚本方便进行一些性能测试的控制(比如希望能 ...
- Eclipse常用快捷键之代码编辑篇
Eclipse是Java开发常用的IDE工具,熟练使用快捷键可以提高开发效率,使得编码工作事半功倍,下面介绍几种常用的代码编辑和补全工具 重命名快捷键:Alt+Shift+R 可用于类名,方法名,属性 ...
- android 模拟器无法启动问题
很早之前就碰到过Android Studio模拟器无法启动的问题,今天终于尝试去解决了下,下面将我解决的方法记录下. 模拟器报错信息为: emulator: ERROR: x86 emulation ...
- MySql的隔离级别总结
使用MySql也有一段时间了,但是很多MySql相关或者说是数据库相关的知识还是一知半解,最近在学hibernate这个框架时碰到挺多和数据库相关的知识盲区,所以下面根据自己对MySql系统相关知识消 ...
- 十一、curator recipes之联锁InterProcessMultiLock
简介 curator实现了一个类似容器的锁InterProcessMultiLock,它可以把多个锁包含起来像一个锁一样进行操作,简单来说就是对多个锁进行一组操作.当acquire的时候就获得多个锁资 ...
- Java反射学习总结
我开始学习反射的初衷是为了理解Spring 里的控制反转,其次可以利用反射来达到类中的解耦. 自己写的一些心得,希望能帮到大家 1.反射指的是对象的反向处理操作,是根据对象来取得对象的来源信息. 反射 ...