我将 FluentValidation 与 MVC 3.0 一起使用;我已将其配置为与自定义验证器工厂和 IoC 容器(Unity)一起使用;
一切正常,我能够进行自定义验证并将它们与我的依赖项一起注入......但是发生了一件奇怪的事情:在我拥有 HtmlHelper 创建控件的所有强类型视图上(例如:Html.Editor),似乎MVC 正在尝试实例化验证器,这会导致 Unity 错误,因为在 Unity 中没有为这些模型映射验证器......在这些视图中,我没有任何检查来查看模型是否有效,也没有有任何自动模型绑定,那么我该如何阻止这种情况发生?我不想为每个模型创建空验证器并在 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] 是一个接口,无法构造。您是否缺少类型映射?