[英]ASP.NET MVC inject per request
我需要为每个请求注入EF上下文。 有没有办法实现它?
Unity讨论列表中提出的解决方案是为每个请求创建一个子容器,让该子容器创建EF上下文作为ContainerControlledLifetime,然后将子容器放置在请求的末尾。 通过这样做,您不必创建自定义LifetimeManager。
我对Unity不是很熟悉,但原理是这样的:
Application_BeginRequest(...)
{
var childContainer = _container.CreateChildContainer();
HttpContext.Items["container"] = childContainer;
childContainer.RegisterType<ObjectContext, MyContext>
(new ContainerControlledLifetimeManager());
}
Application_EndRequest(...)
{
var container = HttpContext.Items["container"] as IUnityContainer
if(container != null)
container.Dispose();
}
注射是什么意思? 你的意思是对它应用依赖倒置原则吗? 如果是,那么您是否曾设想将自己的EF背景与其他符合相同合同的背景交换掉?
对我来说,你应该在框架中的某处封装EF上下文,以便每个请求都获得EF DataContext。 在您的存储库中应用DI。 稍后您的存储库可能具有不同类型的上下文,您可以相互切换存储库。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.