2011-03-11 41 views
1

我正在創建一個小型應用程序,我將通過NuGet進行發佈。我的web應用程序是使用Structuremap爲DI和我的Global.asax我有這樣的片段:發佈並處理結構圖中的所有http作用域對象

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

是否有可能以另一種方式掛鉤這件事,而無需修改在Global.asax?

回答

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(); 
    } 
} 

可以在註冊的方法:

public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
{ 
    filters.Add(new HandleErrorAttribute()); 
    filters.Add(new MyActionFilterAttribute()); 
} 

+2

您也可以註冊您的模塊,而無需編輯的web.config:http://blog.davidebbo.com/2011/02/register-your-http-模塊-AT-runtime.html – 2011-03-11 17:58:15