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

问题描述 投票:0回答:1

我正在尝试在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
    }
}
c# html asp.net .net httphandler
1个回答
1
投票

您可以使用标志:

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执行此任务的更好选择,我建议您使用WebActivator,它是基于WebActivator的非常方便的程序包,允许您订阅诸如[ C0]在单独的库中。

例如,只需将以下代码放在类库中:

Microsoft.Web.Infrastructure

然后只需在ASP.NET应用程序中引用类库。

您还可以使用此便捷的WebActivator将依赖项注入到HttpModules中,并自动注册它们,而无需将其添加到web.config。如果您有兴趣,Phil Haack对此主题写了一份Microsoft.Web.Infrastructure

© www.soinside.com 2019 - 2024. All rights reserved.