【转】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攔截器。而ValidationInterceptorRegistrar的initialize方法則是通過AbpKernelModule來觸發的(以前的博文已有分析)。
?
?
?
最后圖描述了上面四個類的關系。
返回ABP源碼分析系列文章目錄
總結
以上是生活随笔為你收集整理的【转】ABP源码分析十七:DTO 自动校验的实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 车主上午提长安奔奔新车 下午就等来“退一
- 下一篇: 【中国版Office 365 应用程序注