我正在创建一个我将通过NuGet分发的小应用程序。我的网络应用程序正在使用Structuremap for DI和我的global.asax我有这个片段:
protected void Application_EndRequest() {
ObjectFactory.ReleaseAndDisposeAllHttpScopedObjects();
}
是否可以在不修改global.asax的情况下以另一种方式挂钩?
答案 0 :(得分:2)
您可以编写一个可以在web.config中注册的HttpModule:
public class MyModule : IHttpModule
{
public void Init(HttpApplication application)
{
application.EndRequest += Application_EndRequest;
}
private void Application_EndRequest(Object source, EventArgs e)
{
ObjectFactory.ReleaseAndDisposeAllHttpScopedObjects();
}
public void Dispose()
{
}
}
并在web.config中:
<httpModules>
<add name="MyModule" type="AppName.MyModule, AppName" />
</httpModules>
另一种更MVCish方式是编写一个全局动作过滤器:
public class MyActionFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
ObjectFactory.ReleaseAndDisposeAllHttpScopedObjects();
}
}
可以在RegisterGlobalFilters
的{{1}}方法中注册:
Global.asax
击> <击> 撞击>