Asp.net
使用 HttpContextScoped() 時,StructureMap 未處理數據上下文
我的目標是擁有一個數據上下文(
MainDbContext在 ASP.NET MVC 中為每個 HTTP 請求提供一個數據上下文 (),並在請求結束時處理數據上下文。我正在使用以下 StructureMap 配置:
public static class ContainerConfigurer { public static void Configure() { ObjectFactory.Initialize(x => { x.For<MainDbContext>().HttpContextScoped(); }); } }每當我需要 a
MainDbContext時,我都會使用以下程式碼:var dbContext = ObjectFactory.GetInstance<MainDbContext>();這按預期工作:每個 HTTP 請求只創建一個數據上下文。問題是,
MainDbContext在請求結束時沒有被處理。如何配置我的 ObjectFactory 以在 HTTP 請求完成時處理數據上下文?或者這只是我需要
Application_EndRequest()在 Global.asax 中手動使用的東西。更新
我剛剛嘗試將以下程式碼添加到 Global.asax:
protected virtual void Application_EndRequest() { ObjectFactory.GetInstance<MainDbContext>().Dispose(); }正如預期的那樣,這解決了問題。但是,我仍然想知道是否有任何方法可以使用 StructureMap 自動執行此操作。
代替:
x.For<MainDbContext>().HttpContextScoped();嘗試:
x.For<MainDbContext>().HttpContextScoped().Use(() => new MainDbContext());通常也是需要數據庫上下文的儲存庫類。因此,不要
ObjectFactory.GetInstance<MainDbContext>();讓您的儲存庫獲取一些介面數據庫上下文並配置 StructureMap 以將其MainDbContext註入其中。然後讓 StructureMap 將儲存庫注入控制器,…在
Application_EndRequest:protected void Application_EndRequest() { ObjectFactory.ReleaseAndDisposeAllHttpScopedObjects(); }