C# 框架中启动的应用程序的标志

C# 框架中启动的应用程序的标志,c#,html,asp.net,.net,httphandler,C#,Html,Asp.net,.net,Httphandler,我试图在HTML模块的应用程序开始部分执行一些代码。由于Init()被多次激发,是否有可靠的标志来告诉我应用程序是否启动了 public class Module : IHttpModule { #region IHttpModule Members public void Dispose() { //clean-up code here. } public void Init(HttpApplication context)

我试图在HTML模块的应用程序开始部分执行一些代码。由于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
    }
}
如果您的目标是.NET 4.0或更高版本,作为使用HttpModules执行此任务的更好选择,我建议您使用它,它是一个非常方便的包,允许您在单独的库中订阅事件,例如
Application\u 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写了一篇关于这个主题的文章,如果你感兴趣的话。

我认为你应该使用IHttpHandler而不是IHttpModule。我正在尝试创建一些可分发的东西,web.config中的条目是我能想到的最简单、最不具侵入性的说明。