【发布时间】:2011-02-22 02:46:45
【问题描述】:
这不是一个很简单的问题,但希望有人遇到过。
我正在尝试使以下事情协同工作:
- MVC2
- FluentValidation
- 实体框架 4.0 (POCO)
- 温莎城堡
我几乎已经让一切正常了。我已经实现了 Castle Windsor,并与作为 MVCContrib 一部分的 WindsorControllerFactory 提供的控制器一起工作。我还让 Castle 提供 FluentValidation 验证器,如本文所述:http://www.jeremyskinner.co.uk/2010/02/22/using-fluentvalidation-with-an-ioc-container/
当我尝试在视图上使用 Html.EditorForModel 或 EditorFor 时,我的问题就出现了。当我尝试这样做时,我收到以下错误消息:
没有组件支持服务 FluentValidation.IValidator`1[[System.Data.Entity.DynamicProxies.State_71C51A42554BA6C3CF05105DA05435AD209602C217FC4C34CA52ACEA2B06B99B, EntityFrameworkDynamicProxies-BrindleyInsurance.BusinessObjects, Version=1.0.0.0, Culture= /p>
这是由于在 Entity Framework 4.0 上使用了 POCO 生成。在运行时,生成的类被动态代理包装,因此可以进行跟踪和延迟加载。显然,当使用 EditorForModel 或 EditorFor 时,它会尝试要求 Windsor 为动态代理类型而不是底层真实类型创建验证器。
有谁知道我可以做些什么来解决这个问题?
【问题讨论】:
-
有什么方法可以检测 EF4 中的代理吗?
-
你是怎么做到的——通过代理类型关闭 IValidator?
-
框架对此负责。我将 Entity Framework 4 与 POCO 模板一起使用。 EF 在运行时使用代理类型包装真实类型,因此它可以执行诸如延迟加载之类的操作。因此,在您不知情的情况下,您实际上是在使用代理类型。当框架调用验证器工厂并将其传递给工厂时,框架就会发现这一点。当然,工厂不知道那是,所以你得到错误。正如其中一个答案所暗示的那样,我将致力于创建一个新的验证器工厂。如果我得到它的工作,我会发布。
标签: asp.net-mvc entity-framework castle-windsor poco fluentvalidation