ABP源碼分析十七:DTO 自動校驗的實現


對傳給Application service對象中的方法的DTO參數,ABP都會在方法真正執行前自動完成validation(根據標注到DTO對象中的validate規則)。 ABP是如何做到的? 思路無外乎通過Castle的攔截器實現AOP。本文主要分析ABP是如何設計。

Ivalidate: 空接口,用於標識該接口的對象在使用前需要被validate先。

IInputDto:用於輸入參數的DTO,該接口繼承自Ivalidate。所以所有作為輸入參數的DTO都會在使用前先validate。

ICustomValidate: 用於自定義Validation 規則. ABP默認的validation 規則是來自System.ComponentModel.DataAnnotations中的規則。如果要添加自定義Validation 規則,需要實現ICustomValidate接口。

IShouldNormalize:該接口定義了Normalize方法,實現該方法可以在Validation 后,使用前,對DTO做最后的處理。

 

 

 

MethodInvocationValidator: ABP通過這個對象中的validate方法對被調用方法中的參數(繼承自Ivalidate的參數)做validate. 通過下面的代碼可以看出只要對象實現了Ivalidate接口,都會被強制執行validation.

 

 

ValidationInterceptor:上面MethodInvocationValidator的validate方法是由ValidationInterceptor觸發的。這是一個自定義的Castle攔截器。

 

ValidationInterceptorRegistrar:上面ValidationInterceptor攔截器則是由ValidationInterceptorRegistrar注入到ABP底層容器中的。ABP只針對實現了Iapplicationservice接口的對象注入ValidationInterceptor攔截器。而ValidationInterceptorRegistrarinitialize方法則是通過AbpKernelModule來觸發的(以前的博文已有分析)。

 

 

 

最后圖描述了上面四個類的關系。

返回ABP源碼分析系列文章目錄


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM