代码之家  ›  专栏  ›  技术社区  ›  Asbjørn Ulsberg

应用程序启动与OnInit与构造函数

  •  7
  • Asbjørn Ulsberg  · 技术社区  · 16 年前

    HttpApplication Application_Start , Application_End 等)。

    如果您想在HTTP应用程序的整个生命周期中只做一次, 是一个显而易见的地方。正确的?不完全是。首先,这本身不是一个事件,而是一个神奇的命名约定,当遵循该约定时,每个IIS创建的AppDomain都会调用一次该方法。

    Start 上的事件 HTT应用程序 Init . 好吧,这也不是一个真正的事件,它是一个可重写的方法,这是下一个最好的事情。

    看来 Init() HTT应用程序 HTT应用程序 对象的构造函数。

    现在我的问题是,为什么我不把启动逻辑放在构造函数中呢?为什么连 初始化() 应用程序启动 ? 如果我这样做了,有人能解释为什么在

    有人能解释一下为什么在一个典型的ASP.NET应用程序中 HTT应用程序 已创建(这会导致 初始化 initialized

    3 回复  |  直到 15 年前
        1
  •  3
  •   Brandon Roberson    15 年前

    在第一次创建HttpApplication实例时调用Application\u Start,而不是在随后的实例上调用,这似乎有点像黑客。也许微软不想向那些不想知道的人解释静态构造函数的概念。

    然而,Application_End()似乎是必要的,因为没有C#等价的静态析构函数/终结器。作为黑客来说,这不是那么糟糕。只是闻起来有点怪。

        2
  •  4
  •   Tiju John    16 年前

    您的问题的答案是,确实会调用Application\u Start event,但只针对HttpApplication的第一个实例,而不是后续实例,因此您可以确保,每当您的应用程序启动或IIS的应用程序池重新启动时,都会准确地调用它一次。应用程序和事件(最后一个实例)也是如此

    同时,对HttpApplication对象的每个实例都调用Init()和Dispose()。它将在每个实例上调用,也就是在每个请求上调用。

        3
  •  0
  •   Daniel Dyson    16 年前

    为每个并发请求创建一个HttpApplication对象。也就是说,ASP.NET创建的每个线程都有自己的HttpApplication实例。实例在后续请求中的重用方式与线程池中的线程重用方式相同。