我们试图从我们的许多Web应用程序中删除global.asax,以支持处于通用代码库中的HttpModules。对于许多应用程序事件(例如BeginRequest和PostAuthentication),这非常有效,但HttpModule中没有公开Application Start事件。如何在HttpModule中使用或模仿Application OnStart?
我可以想到几个臭的方法来克服这个赤字。例如,我可以这样做:
protected virtual void BeginRequest(object sender, EventArgs e)
{
Log.Debug("Entered BeginRequest...");
var app = HttpContext.Current.Application;
var hasBeenSet app["HasBeenExecuted"] == null ? false : true;
if(!hasBeenSet)
{
app.Lock();
// ... do app level code
app.Add("HasBeenExecuted", true);
app.Unlock();
}
// do regular begin request stuff ...
}
但是,这只是对我没有好闻。
什么是最好的方式来调用一些应用程序的开始逻辑没有global.asax?
@John:这看起来像一个单身模式。比如,当多个请求同时进入时,由于线程问题,我会有点担心使用静态。应用程序对象至少有一些简单的锁定/解锁来帮助解决这个问题。 – 2010-04-02 19:42:42
@John:我看到你现在添加了...... :) – 2010-04-02 19:43:41
@Sailing:锁一直在那里。答案没有被编辑。 – 2010-04-02 19:45:42