即使在未设置任何验证器的模型上也会出现FluentValidation

时间:2012-07-12 07:06:22

标签: c# asp.net-mvc-3 fluentvalidation

我在MVC 3.0中使用FluentValidation;我已将其配置为使用自定义验证器工厂和IoC容器(Unity);

一切正常,我可以进行自定义验证,并使用我的依赖项注入它们...但是发生了一件奇怪的事情:在所有强类型视图中,我有HtmlHelper创建的控件(例如:Html.Editor),似乎MVC正在尝试实例化一个验证器,这会导致Unity错误,因为在Unity中没有为这些模型映射的Validator ......在那些视图中我没有任何检查来查看Model是否有效,并且没有任何自动模型绑定,所以我怎么能阻止这种情况发生?我不想为每个模型创建空验证器,并在Unity中注册它们只是为了摆脱这些错误。

以下是我在global.asax中注册工厂的方法:

FluentValidationModelValidatorProvider.Configure(provider =>
{
    provider.ValidatorFactory = new UnityValidatorFactory(container);
});
DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;

这就是我注册自定义验证器的方式:

container.RegisterType<IValidator<XViewModel>, XViewModel>(
    new ContainerControlledLifetimeManager(),
    new InjectionConstructor(container.Resolve<ILocalizationService>(),
    container.Resolve<ISessionService>()));

对于XView,一切正常,在我的动作方法中,我做一个TryUpdateModel并且验证工作正常;但对于我不想进行任何验证的其他视图,MVC仍然会尝试为它们解析验证器并且通常会失败,因为Unity中没有注册任何内容

你对如何解决这个问题有任何想法吗?

谢谢,

乔治

修改 其他视图的错误是: 当前类型IValidator`1 [... ViewModel]是一个接口,无法构造。你错过了类型映射吗?

1 个答案:

答案 0 :(得分:0)

当我无法解析类型时,我修改了UnityValidatorFactory以返回null;我不知道这种解决方法从性能的角度来看有多好(因为引发了异常),但目前我还没有更好的解决方案......