如何在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会调用这个方法,后能触发静态方法的调用。
}

sales@spasvo.com