.net – 简单注入器“由于在MVC验证期间已经处理了DbContext,因
发布时间:2020-12-16 03:29:59 所属栏目:asp.Net 来源:网络整理
导读:我有一个非常复杂的问题.我在ASP.NET MVC 5项目中使用FluentValidation.MVC.在其中,我使用存储库模式来检查用户的电子邮件地址是否不重复.问题不在于存储库模式;这是存储库在运行时使用注入构造函数的实体框架上下文: public class SomeRepository{ //IEFCo
我有一个非常复杂的问题.我在ASP.NET MVC 5项目中使用FluentValidation.MVC.在其中,我使用存储库模式来检查用户的电子邮件地址是否不重复.问题不在于存储库模式;这是存储库在运行时使用注入构造函数的实体框架上下文:
public class SomeRepository { //IEFContext is something I modified the T4 template to generate public SomeRepository(IEFContext context) { _context = context; } } 该应用程序使用这种方法,它工作得很好. SimpleInjector连接我的EF上下文,其范围限定为使用Per ASP.NET Web请求(包装HttpContext.Items). Dim httpLifecycle = New SimpleInjector.Integration.Web.WebRequestLifestyle(True) container.Register(of IEFContext,EFContext)(httpLifecycle) 这里的应用没有问题,只是验证.当服务器收到post操作时,我得到的错误是“由于已经处理了DbContext,因此无法完成操作”.看来我不能在FluentValidation属性中使用任何与EF相关的代码,该属性在每个Web请求的基础上使用EF上下文.验证属性没有什么特别之处,它可以: public class Val : AbstractValidator<Entity> { public Val() { _repos = Container.GetInstance<ISomeRepos>(); RuleFor(i => i.Email).Must((o,v) => { _repos.HasDistinctEmail(o.ID,v); } } } 由于存储在HttpContext.Items中,因此上下文应该与之前的请求一起死亡.知道发生了什么事吗?我知道通过将True设置为WebRequestLifecycle,我会在请求结束时处理EF上下文.我认为这是可取的. 解决方法
我最好的选择是在AppDomain(单例)的持续时间内缓存Val类的实例,这意味着它的构造函数只调用一次,因此它只解析一个ISomeRepos,导致该repo被提升为单例同样(以及它的所有依赖).
快速修复很简单,在委托中移动GetInstance调用: public Val() { RuleFor(i => i.Email).Must((o,v) => { repos = Container.GetInstance<ISomeRepos>(); repos.HasDistinctEmail(o.ID,v); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 身份验证 – 在达到会话和身份验证票证超时值之前,用户被迫
- asp.net – PipeLine模式和池标识是否会影响使用Integrated
- asp.net – 使用XML Schema和OpenXML SDK进行WordML模板化
- asp.net – App_Code中的类无法通过Global.asax.cs访问
- asp-classic – 在Classic ASP中的应用程序范围中使用字典对
- 如何清除代码背后的整个asp.net页面?
- asp.net-mvc-4 – Windows身份验证和Asp.Net Web API
- ASP.NET上的ASP.NET未来?
- asp.net-core-mvc – 如何创建从HttpContext.TraceIdentifi
- asp.net-core – ASP.NET核心中的Angular CLI,具有热模块替
推荐文章
站长推荐
- ASP.NET MembershipProvider加密/解密
- asp.net-mvc – 如何在保留控制器名称的同时分解
- 如何在codenameone中使用ASP.Net wsdl web服务
- asp.net – 实体框架CTP5,代码优先.可选的导航属
- asp.net – 将图像转换为字节以存储在数据库中
- asp.net-mvc – 汇编绑定重定向不工作
- asp.net-mvc – IdentityUserLogin不包含User的定
- 推荐用于ASP.NET性能优化和测试的书籍
- asp.net-mvc – Asp.net Identity使用什么算法来
- asp.net-mvc – 区域内的Asp.Net MVC IgnoreRout
热点阅读