如何以编程方式向应用程序事件添加操作?

时间:2014-07-08 05:46:15

标签: asp.net asp.net-mvc

在global.asax中,我们可以实现与应用程序事件相对应的方法,例如 Application_EndRequest ,并添加我们想要的任何代码。

我正在开发一个需要附加到其中一些事件的插件,有没有办法以某种方式以编程方式将这些操作推送到应用程序流中?

显然,目标是避免在使用插件时在global.asax中手动添加代码。

1 个答案:

答案 0 :(得分:2)

如何将HTTP模块挂钩到MVC应用程序

如果我理解正确,您需要创建一个外部库并将其“挂钩”到MVC应用程序的事件中。

1。创建一个简单的类库。

首先要创建一个简单的类库。我们称之为TestLib

Creating TestLib

2。创建一个名为TestLibHttpModule的新类。

该类实现IHttpModule。这授予它Init()方法。初始化模块时将调用此方法,并将初始化模块的HttpApplication对象传递给我们。

在我们的Init方法中,我们会在EventHandler事件中添加新的EndRequest

现在,我们的事件处理程序方法只会抛出一个带有厚颜无耻的消息的异常。

namespace TestLib
{
    public class TestLibHttpModule : IHttpModule
    {
        public void Dispose()
        {

        }

        public void Init(HttpApplication context)
        {
            context.EndRequest += new EventHandler(context_EndRequest);
        }

        private void context_EndRequest(object sender, EventArgs e)
        {
            // get the HttpApplication context
            HttpApplication context = (HttpApplication)sender;
            throw new NotImplementedException("At least it works.");
        }
    }
}

3。将库的构建路径指向我们的MVC项目。

假设您已经在附近设置了一个MVC项目,可能称为 TestApp ,请将库的构建路径指向MVC项目的bin文件夹。现在,每次我们构建模块时,它都会被抛入MVC项目。

Changing the build path

4。更新MVC项目以使用HttpModule。

MVC应用程序的 Web.config 有一个用于指定Http Modules的地方。在system.Web元素下,添加一个新的httpModules部分(如果它尚不存在)。

<system.web>
[ ... ]
    <httpModules>
        <add name="TestLibModule" type="TestLib.TestLibHttpModule, TestLib" />
    </httpModules>
</system.web>

5。运行MVC应用程序。

Running the app