2012-10-04 102 views
3

我正在嘗試爲FluentValidation構建一個通用遠程驗證程序擴展,類似於this thread中討論的內容。在this blog中發佈了客戶端解決方案,但我需要遠程驗證程序來同時處理客戶端和服務器端。FluentValidation和服務器+客戶端遠程驗證程序

該規則將看起來像這樣:

IRuleBuilderOptions<T, TProperty> Remote(string action, 
             string controller, 
             Expression<Func<T, object>>[] properties, 
             IComparable[] values, 
             HttpVerbs httpVerb = HttpVerbs.Get); 

其中:
actioncontroller是動作/控制器
properties的名稱是模型屬性表達式(M =>米的陣列。名字)
values是一個文字值數組

設置驗證器的規則可能看起來像t他:

this.RuleFor(m => m.Username).Remote("UsernameUnique", "RemoteController", null, null); 

我想我可以找出客戶端的一塊,我將只是建立一個jQuery適配器調用操作方法,傳遞價值。

我弄不清楚的是,從驗證器的IsValid方法到如何調用相同的控制器操作。

這裏有一些選擇,我認爲:

  • 不知怎的,遠程調用控制器動作,創建一個存根上下文。不知道如何使用IoC注入依賴關係。服務定位器?

  • 使用普通的.NET方法,並從驗證器和操作方法中調用該方法。

我認爲這將是一個強大的驗證有可用的,但它似乎像任何選項我想出將是醜陋的,即使我設法得到它的工作。

有沒有更好的方法來解決這個問題?我對任何可以工作的東西都完全開放,我只是沒有找到很多選擇,至少不是很優雅的選擇。但是,在這一點上,如果沒有其他選擇,我甚至可以用非優雅的解決方案。

回答

0

您可以添加一個額外的方法參數,該參數接受Controller的操作方法的lambda函數。

這是馬虎,我目前正在研究如何將遠程驗證集成到FluentValidation框架中。如果我拿出其他東西,我會告訴你。