在global.asax中,我们可以实现与应用程序事件相对应的方法,例如 Application_EndRequest ,并添加我们想要的任何代码。
我正在开发一个需要附加到其中一些事件的插件,有没有办法以某种方式以编程方式将这些操作推送到应用程序流中?
显然,目标是避免在使用插件时在global.asax中手动添加代码。
答案 0 :(得分:2)
如果我理解正确,您需要创建一个外部库并将其“挂钩”到MVC应用程序的事件中。
首先要创建一个简单的类库。我们称之为TestLib
。
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.");
}
}
}
假设您已经在附近设置了一个MVC项目,可能称为 TestApp ,请将库的构建路径指向MVC项目的bin
文件夹。现在,每次我们构建模块时,它都会被抛入MVC项目。
MVC应用程序的 Web.config 有一个用于指定Http Modules的地方。在system.Web
元素下,添加一个新的httpModules
部分(如果它尚不存在)。
<system.web>
[ ... ]
<httpModules>
<add name="TestLibModule" type="TestLib.TestLibHttpModule, TestLib" />
</httpModules>
</system.web>