释放并处理Structuremap中的所有http范围对象

时间:2011-03-11 13:28:07

标签: asp.net-mvc-3 structuremap

我正在创建一个我将通过NuGet分发的小应用程序。我的网络应用程序正在使用Structuremap for DI和我的global.asax我有这个片段:

 protected void Application_EndRequest() {
    ObjectFactory.ReleaseAndDisposeAllHttpScopedObjects();
}

是否可以在不修改global.asax的情况下以另一种方式挂钩?

1 个答案:

答案 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

<击>