【问题标题】:How to hook into Application_Start from Web.config?如何从 Web.config 连接到 Application_Start?
【发布时间】:2013-02-25 00:36:22
【问题描述】:

我想在 Application_Start 中执行一些逻辑,但不必将其添加到 Global.asax.cs 中的 Application_Start 中,有没有办法可以在 web.config 中添加一个条目来执行它在确切的 Application_Start 中?

【问题讨论】:

    标签: c# asp.net .net web-config asp.net-4.0


    【解决方案1】:

    特别是从 web.config,您可以创建一个 HTTP Module,它会挂接到应用程序的启动。

    另外,根据您的设置,您可以使用WebActivator (Nuget),它允许您在运行时挂接到 Application_Start 事件。

    【讨论】:

    • BeginRequest和Application_Start一样吗?
    • @TruMan1 BeginRequest 将在您的应用程序的每个请求开始时触发。所以每次有人访问该应用程序。 Application_Start 将是您的应用程序在应用程序池回收(配置更改、二进制更改等)后启动并触发一次,无论收到多少 Web 请求。
    • HTTP 模块事件也会触发多次,例如 init.似乎唯一让它运行一次的地方是 global.asax.cs。
    • @TruMan1 你可以使用 Init() 函数来做你想做的事。不过要小心,因为 Init() 函数可能会被多次调用。查看stackoverflow.com/a/3378584/254973 以获取更多信息。但这可能会开始进入矫枉过正的领域。说真的,看看 WebActivator,您可以将它绑定到 Web 应用程序启动过程的许多部分,而无需重新发明轮子。
    【解决方案2】:

    您也许可以在 app_start 中创建一个初始化程序,用于查看网络配置并加载您想要启动的各种任务

    【讨论】:

      【解决方案3】:

      有不同的方法可以做到这一点,一种简单的方法是

      1. 在 web.config 中为将执行该工作的类/接口创建一个条目。
      2. 放那个类的实际实现
      3. 在 Application_Start 中,从 web.config 加载值,使用反射或您能想到的任何方法创建类的实例 例如http://msdn.microsoft.com/en-us/library/system.activator.createinstance.aspx
      4. 调用该类中实际执行逻辑的函数。

      或者您可以使用其他一些技术,例如依赖注入,并从 web.config 中注入实际实现

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-11-05
        • 2012-02-06
        • 1970-01-01
        • 2015-10-17
        • 2022-08-14
        • 2022-08-09
        • 1970-01-01
        • 2016-08-13
        相关资源
        最近更新 更多