2012-07-12 26 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;我不知道從性能的角度來看這個解決方案有多好(因爲引發了異常),但目前我沒有更好的解決方案...

相關問題