ASP.NET MVC按请求注入
我需要为每个请求注入EF上下文。 有没有办法实现它?
Unity讨论列表中提出的解决方案是为每个请求创建一个子容器,让该子容器创建EF上下文作为ContainerControlledLifetime,然后将子容器放置在请求的末尾。 通过这样做,您不必创建自定义LifetimeManager。
我对Unity不是很熟悉,但原理是这样的:
Application_BeginRequest(...) { var childContainer = _container.CreateChildContainer(); HttpContext.Items["container"] = childContainer; childContainer.RegisterType (new ContainerControlledLifetimeManager()); } Application_EndRequest(...) { var container = HttpContext.Items["container"] as IUnityContainer if(container != null) container.Dispose(); }
您是否通过Unity和ASP.NET MVC查看了这篇关于DI的优秀博客?
应该让你走上正确的轨道。
答案是肯定的 ,你可以 – 而且文章告诉你如何。
简而言之,您创建了一个HttpContextLifetimeManager来处理对象的“范围”。 容器在HTTP上下文中“缓存”实例。
这是必需的,因为Unity提供的默认生命周期管理器不包括“现成的”HTTP上下文范围。
当然,其他DI容器(例如StructureMap – 我使用的)也可以。
这是关于同一件事的另一篇(更新)文章,以“Nerdinner”为例。
注射是什么意思? 你的意思是对它应用依赖倒置原则吗? 如果是,那么您是否曾设想将自己的EF背景与其他符合相同合同的背景交换掉?
对我来说,你应该在框架中的某处封装EF上下文,以便每个请求都获得EF DataContext。 在您的存储库中应用DI。 稍后您的存储库可能具有不同类型的上下文,您可以相互切换存储库。
- ASP.NET MVC + WF + WCF + SERVICE LAYER如何在一个项目中使用它们?
- 如何在IIS 7.0中托管MVC应用程序?
- 如何在URL中没有操作的情况下获取路由
- 将ASP.NET MVC ViewResult HTML呈现为没有第三方组件的图像
- 如何使用Kendo UI Grid与ToDataSourceResult(),IQueryable ,ViewModel和AutoMapper?
- KendoUI级联下拉列表,需要2个下拉列表的值。
- Visual Studio与Visual Web Developer
- 具有多个前导零小数的属性路由
- 为什么Nhibernate在我的MVC应用程序中跨多个请求共享会话?