如何在ASP.NET应用程序中初始化
作者:网络转载 发布时间:[ 2013/3/26 10:31:01 ] 推荐标签:
我们还是来看一下ASP.NET的源代码吧:
internal class BuildResultMainCodeAssembly : BuildResultCompiledAssembly
{
private MethodInfo FindAppInitializeMethod(Type t)
{
return t.GetMethod("AppInitialize",
BindingFlags.Public | BindingFlags.Static | BindingFlags.IgnoreCase,
null, new Type[0], null);
}
根据代码我们可以发现AppInitialize方法的特点有:
1、必须是一个公开的静态方法:BindingFlags.Public | BindingFlags.Static
2、方法名不区分大小写:BindingFlags.IgnoreCase
3、方法不允许有传入参数:new Type[0]
HttpModule也能执行初始化的任务
由于HttpModule总是会在ASP.NET管线中被调用,所以,我们还可以用它来完成初始化的操作。
public class InitAppModule : IHttpModule
{
public void Init(HttpApplication context)
{
//注意:Init事件可能被多次调用,所以这个方法会被多次调用。
AppInitializer.Init();
}
正如代码注释所说的那样,这种调用代码是不对的,除非你能接受初始化代码被多次调用!
所以,我们应该按单例模式的思路来改写代码:
private static readonly object s_lock = new object();
private static bool s_initOK;
public void Init(HttpApplication context)
{
lock( s_lock ) {
if( s_initOK == false ) {
//保证初始化代码只执行一次。
AppInitializer.Init();
s_initOK = true;
}
}
}
如果你希望代码简单一点,还可以这样实现:
public class InitAppModule : IHttpModule
{
static InitAppModule()
{
AppInitializer.Init();
}
public void Init(HttpApplication context)
{
// 留个空方法,
// ASP.NET会调用这个方法,后能触发静态方法的调用。
}
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11