在构造函数中手动添加Application Start事件处理程序

Stu*_*tLC 5 c# asp.net global-asax

Global作为应用程序的替代方案中AutoEventWireups,似乎事件是针对大多数底层Application事件(BeginRequest, AuthorizeRequest, Error等)公开的,以及一组异步方法AddOnBeginRequestAsync等等.但是,我找不到等效的事件ApplicationStart!

所以我的问题是,无论如何都要订阅该AutoEventWireup方法Application_(On)Start被挂钩的"相同"事件?

public class Global : HttpApplication
{
    public Global()
    {
        // I can do this ...
        base.BeginRequest += new EventHandler(Global_BeginRequest);
        // Or even AddOnBeginRequestAsync();

        // But how can I do this?
        base.ApplicationStart += new EventHandler(GlobalApplication_Start);
    }

    protected void Global_BeginRequest(object sender, EventArgs e)
    {
      // ...
    }

    protected void Global_ApplicationStart(object sender, EventArgs e)
    {
      // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

(出于兴趣...有没有办法关闭AutoEventWireupsGlobal.asax?使用AutoEventWireup ="false"属性似乎只适用于aspx页面)

编辑 - 似乎ApplicationStart和ApplicationEnd"是不代表HttpApplication事件的特殊方法".所以我可能会完全咆哮错误的树.

编辑 Re:为什么我需要这个?不幸的是,一个企业客户有一个框架,新的应用程序需要继承他们的自定义HttpApplication类,而FWR,他们HttpApplication已经实现了autowireup Application_(On)Start,这意味着我需要找到另一种方法来覆盖Framework连线,这样我就可以Bootstrap my了IoC容器和Automapper映射.根据劳埃德的回答,我也可以在ctor中进行自举Init(),尽管这并不完全相同.最终,我能够更改公司框架以允许多个订阅.

Llo*_*oyd 4

您可以覆盖 Init:

public class MyApplication : HttpApplication
{

    public override void Init()
    {
        base.Init();
    }

}
Run Code Online (Sandbox Code Playgroud)

然而你的构造函数也可以正常工作。