asp.net-mvc-3 – 是否需要StructureMap HttpContextScoped?
我在EF代码的教程中首先看到了如下代码,MVC和StructureMap来创建Context Per Request模式:
protected void Application_Start() { ... initStructureMap(); } private static void initStructureMap() { ObjectFactory.Initialize(x => { x.For<IUnitOfWork>().HttpContextScoped().Use(() => new Context()); x.For<IFirstEntity>().Use<FirstEntity>(); x.For<ISecondEntity>().Use<SecondEntity>(); x.For<IThirdEntity>().Use<ThirdEntity>(); }); ControllerBuilder.Current.SetControllerFactory(new StructureMapControllerFactory()); } protected void Application_EndRequest(object sender,EventArgs e) { ObjectFactory.ReleaseAndDisposeAllHttpScopedObjects(); } public class StructureMapControllerFactory : DefaultControllerFactory { protected override IController GetControllerInstance(RequestContext requestContext,Type controllerType) { return ObjectFactory.GetInstance(controllerType) as Controller; } } FirstEntity,SecondEntity和……都需要在构造函数中使用IunitOfWork. 正如你所看到的那样,只使用HttpContextScoped()用于Context而不是其他用户,在EndRequest事件中它调用ReleaseAndDisposeAllHttpScopedObjects(). 1-这是一个正确的方法吗? 2-我应该将HttpContextScoped()用于所有其他服务层接口,还是仅用于IUnitOfWork?例如 x.For<IFirstEntity>().Use<FirstEntity>(); 要么 x.For<IFirstEntity>().HttpContextScoped().Use(() => new FirstEntity()); 3- ReleaseAndDisposeAllHttpScopedObjects()处理所有实例还是只处置Context? 解决方法
Web应用程序的约定是在整个http请求期间保持相同的ORM上下文/ UnitOfWork.这是为了在请求期间使用相同的实体,保持数据一致并最小化数据库调用. HttpContextScoped生命周期确保在请求所有具有依赖关系的实例期间使用相同的UoW实例.
所以1)是的,这是正确的 关于“服务层接口”的其余部分,它取决于在整个请求期间它是否需要是同一个实例.问问自己:“在整个请求期间是否需要此对象的状态”?对于大多数“服务”而言,情况并非如此.另请注意,制作“HttpContextScoped”的内容也会使其所有依赖关系保持在该范围内. 这让我说2)在大多数情况下,没有 ReleaseAndDisposeAllHttpScopedObjects处理使用HttpContextScoped注册的容器中的所有对象.默认情况下,对象的范围是Structuremap中的瞬态(每个调用的新实例). 所以3)只会处理IUnitOfWork实例. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 为什么MvcApplication.RegisterRoutes被定义
- asp.net – 我可以在SQL会话状态配置中重用现有连接字符串吗
- asp.net-core – 在.net Core中使用NPoco
- asp.net – jQuery flot,来自SQL Server的Live plotting
- asp.net-mvc – MVC安装需要?永远
- asp.net-mvc-3 – 方法“OrderBy”必须在方法“跳过”异常之
- ASP.NET MVC 5无法呈现jQuery UI CSS包
- asp.net – 使用ARR的IIS反向代理与目录级别有问题
- WeihanLi.Npoi 支持 ShadowProperty 了
- asp.net-mvc – ActionResult返回类型的要点是什么?
- 【译】使用Jwt身份认证保护 Asp.Net Core Web Ap
- asp.net – 如何使IRouteConstraint过滤器路由
- asp.net-web-api – Asp.net web api中的DbGeome
- 锯齿状数组< - > ASP.NET中的多维数组转换
- asp.net-web-api2 – WEB API 2,Selfhost,Access
- ASP.NET(MVC)服务图像
- asp.net – 如何为外部依赖项使用依赖注入?
- asp.net – 从用户控件访问父页面属性
- asp.net-web-api – 在ASP.NET WebAPI OData中返
- asp.net-mvc-3 – 无法加载文件或程序集’Micros