在框架中启动的应用程序标志?

我想在HTTML模块的应用程序启动中执行一些代码。由于Init()被多次触发,是否有可靠的标志告诉我应用程序是否启动?在框架中启动的应用程序标志?

public class Module : IHttpModule 

{

#region IHttpModule Members

public void Dispose()

{

//clean-up code here.

}

public void Init(HttpApplication context)

{

//PROCESS ON APPLICATION START EVENT

this.OnApplicationStart(context);

}

#endregion

public void OnApplicationStart(HttpApplication context)

{

if (!application started??) //FRAMEWORK FLAG?

//DO SOMETHING

}

}

回答:

你可以使用一个标志:

public class Module : IHttpModule 

{

private static bool isStarted = false;

private static object syncRoot = new object();

public void Dispose()

{

//clean-up code here.

}

public void Init(HttpApplication context)

{

if (!isStarted)

{

lock (syncRoot)

{

if (!isStarted)

{

//PROCESS ON APPLICATION START EVENT

this.OnApplicationStart(context);

isStarted = true;

}

}

}

}

public void OnApplicationStart(HttpApplication context)

{

//DO SOMETHING

}

}

作为一个更好的选择,使用的HttpModules如果你是靶向.NET 4.0来执行这项任务以后我会用你WebActivator这是一个非常推荐方便的软件包,基于Microsoft.Web.Infrastructure,允许您在单独的库中订阅事件,如Application_Start

例如,简单地把下面的代码在类库:

[assembly: WebActivator.PreApplicationStartMethod(typeof(WebAppInitializer), "Start")] 

namespace FooBar

{

public static class WebAppInitializer

{

public static void Start()

{

// PROCESS ON APPLICATION START EVENT

}

}

}

然后引用在ASP.NET应用程序的类库是所有需要。

你也可以使用这个方便的WebActivator在你的HttpModules中执行依赖注入并自行注册它们,而不需要将它们添加到web.config中。如果您有兴趣,Phil Haack就此主题撰写了nice blog post

以上是 在框架中启动的应用程序标志? 的全部内容, 来源链接: utcz.com/qa/258705.html

回到顶部