2012-07-12 61 views
1

我正在使用FluentValidation和MVC 3.0;我已经将它配置为与自定义验证工厂和IoC容器(Unity)一起工作;即使在没有任何验证器集的模型上也会发生FluentValidation

一切工作正常,我可以做自定义验证,并注入他们与我的依赖...然而,一个奇怪的事情发生了:在所有强类型的意见,我有HtmlHelper创建控件(例如:Html.Editor) ,似乎MVC试图实例化验证程序,并且这会导致Unity错误,因为Unity中没有为这些模型映射验证程序...在这些视图中,我没有任何检查来查看Model是否有效,以及也没有任何自动模型绑定,所以我怎么能阻止这种情况发生?我不希望有每个模型创建空的验证和统一注册它们只是为了摆脱这些错误的..

这里是我注册的工厂在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仍然尝试解析验证器为他们和通常失败,因为什么都没有注册在统一

你有什么想法如何解决这个问题?

谢谢

乔治

编辑: 其他观点的错误是: 当前类型,IValidator`1 [...视图模型],是一个接口,不能构建。你是否缺少类型映射?

回答

0

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