对传给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源码分析系列文章目录

最新文章

  1. sql命令
  2. 第3章 C#中的委托和事件
  3. ContainerBase.addChild: start: org.apache.catalina.LifecycleException: Failed to start component解决
  4. Android studio删除工程项目,androidstudio
  5. CentOS防火墙操作实例(启动、停止、开、闭端口)
  6. Delphi 在任务栏隐藏程序图标
  7. Netbeans使用Xdebug调试的配置
  8. ActionBarSherlock的使用--------(一)配置
  9. nyoj 228 士兵杀死(五岁以下儿童)【树状数组】
  10. 洛谷 [P4016] 负载平衡问题
  11. MySQL-数据检索
  12. phpstorm ftp主动模式能连接上,但获取不到目录;
  13. java maven项目找不到jconsole-1.8.0.jar和tools-1.8.0.jar包
  14. .net Core 中将原MVC中的 MvcHtmlString转换
  15. 关于微信支付回调url失败的原因
  16. HDFS入门
  17. mongodb节点配置指南
  18. 783. Minimum Distance Between BST Nodes
  19. Flask的请求与响应
  20. The 'brew link' step did not complete successfully

热门文章

  1. 关于全局ID,雪花(snowflake)算法的说明
  2. nginx+php的使用
  3. 【SSM框架】Spring + Springmvc + Mybatis 基本框架搭建集成教程
  4. 谈谈一些有趣的CSS题目(六)-- 全兼容的多列均匀布局问题
  5. .Net 大型分布式基础服务架构横向演变概述
  6. Django admin定制化,User字段扩展[原创]
  7. 在你的ASP.NET MVC中使用查找功能
  8. 【夯实PHP基础】nginx php-fpm 输出php错误日志
  9. 2016/12/30_Python
  10. iOS 10 跳转系统设置