asp.net-mvc – Unity PerRequestLifetimeManager在不同请求中重
我为我们的项目设置了Unity for dependency injection.项目本身是一个使用MVC和Web API的ASP.NET应用程序.
对于数据库上下文,我正在使用PerRequestLifetimeManager.这样做是为了使业务逻辑的不同位使用相同的上下文(从而使用相同的事务). 为了能够使用PerRequestLifetimeManager,我添加了针对ASP.NET MVC的nuget包Unity bootstrapper和ASP.NET Web API的Unity bootstrapper的引用. 要在Web API中使用此生命周期管理器,已在启动代码中添加以下行: Microsoft.Web.Infrastructure.DynamicModuleHelper.DynamicModuleUtility.RegisterModule(typeof(UnityPerRequestHttpModule)); Unity容器是为MVC和Web API设置的: var container = BuildUnityContainer(); GlobalConfiguration.Configuration.DependencyResolver = new Microsoft.Practices.Unity.WebApi.UnityDependencyResolver(container); System.Web.Mvc.DependencyResolver.SetResolver(new Microsoft.Practices.Unity.Mvc.UnityDependencyResolver(container)); 在构建Unity容器时,数据库上下文设置为按请求以下列方式解析: container.RegisterType<IDataContext>(new PerRequestLifetimeManager(),new InjectionFactory(c => { // Some code return new DataContext(/* params */); } )); 但是,似乎这段代码没有为每个请求提供一个新的DataContext.它在一个请求中给了我不同地方的相同上下文(很好).但是,后续的(web api)请求被赋予了相同的DataContext实例,我希望为每个新请求创建一个新的请求.我也希望在请求完成后(类实现IDisposable)正确处理DataContext. 这里发生了什么?我是否缺少一些配置才能使其正常工作?或者这不应该像我期望的那样工作? 解决方法
问题是UnityDependencyResolver在多个请求中缓存已解析的项目.我不得不将其更改为UnityHierarchicalDependencyResolver,然后根据相关的LifetimeManager开始正确解析我的项目.当看起来即使使用TransientLifetimeManager时,它仍然会返回相同的实例,这个问题最初变得更加混乱.
我在一个不同的(但有些相关的)问题中找到了答案:using a Handler in Web API and having Unity resolve per request 所以我所做的就是改变 GlobalConfiguration.Configuration.DependencyResolver = new Microsoft.Practices.Unity.WebApi.UnityDependencyResolver(container); 至 GlobalConfiguration.Configuration.DependencyResolver = new Microsoft.Practices.Unity.WebApi.UnityHierarchicalDependencyResolver(container); 我所有的问题都解决了. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc-3 – 修改StringLength验证的默认ErrorMessage
- asp.net-4.0 – Asp.net 4.0:如何在自定义错误页面中获取异
- asp.net – 有没有= window.onload在Javascript?
- asp.net读取磁盘文件、删除实例代码
- asp.net – 缓存特定的Javascript和CSS文件
- asp.net – 为什么我的控件获得不同的id命名约定?
- 如何用asp.net页面提供javascript?
- asp.net – 按值查找TreeView节点
- 如何使用ASP.NET解析JSON字符串?
- asp.net-mvc – 使用IIS7.5将网站中的URL绑定到另一个网站控
- 将经典ASP应用程序迁移到ASP.NET
- asp.net – 如何在不构建网站的情况下使用MSBuil
- asp.net-mvc – Asp.Net MVC:为什么我的视图将N
- asp.net-mvc – MVC:如何将文件上传和其他表单字
- 为什么ASP.NET MVC 3没有正确验证我的浮动?
- asp.net – Jquery验证插件是否需要表单标记?
- 接收“路径”选项是禁止的.“ASP.NET网站中的异常
- asp.net-mvc – 使用DataAnnotations有条件地验证
- asp.net – 如何在gridview中的Hyperlink列中显示
- asp.net-mvc – 十进制的最佳数据注释(18,2)