对传给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 自动校验的实现相关推荐

  1. 【转】ABP源码分析一:整体项目结构及目录

    ABP是一套非常优秀的web应用程序架构,适合用来搭建集中式架构的web应用程序. 整个Abp的Infrastructure是以Abp这个package为核心模块(core)+15个模块(module ...

  2. 【转】ABP源码分析十六:DTO的设计

    IDTO:空接口,用于标注Dto对象. ComboboxItemDto:用于combobox/list中Item的DTO NameValueDto<T>/NameValueDto:用于na ...

  3. ABP源码分析四十七:ABP中的异常处理

    ABP源码分析四十七:ABP中的异常处理 参考文章: (1)ABP源码分析四十七:ABP中的异常处理 (2)https://www.cnblogs.com/1zhk/p/5538983.html (3 ...

  4. 【转】ABP源码分析四十七:ABP中的异常处理

    ABP 中异常处理的思路是很清晰的.一共五种类型的异常类. AbpInitializationException用于封装ABP初始化过程中出现的异常,只要抛出AbpInitializationExce ...

  5. 【转】ABP源码分析三十七:ABP.Web.Api Script Proxy API

    ABP提供Script Proxy WebApi为所有的Dynamic WebApi生成访问这些WebApi的JQuery代理,AngularJs代理以及TypeScriptor代理.这些个代理就是j ...

  6. 【转】ABP源码分析二十七:ABP.Entity Framework

    IRepository:接口定义了Repository常见的方法 AbpRepositoryBase:实现了IRepository接口的常见方法 EfRepositoryBase:实现了AbpRepo ...

  7. [Abp 源码分析]ASP.NET Core 集成

    点击上方蓝字关注我们 0. 简介 整个 Abp 框架最为核心的除了 Abp 库之外,其次就是 Abp.AspNetCore 库了.虽然 Abp 本身是可以用于控制台程序的,不过那样的话 Abp 就基本 ...

  8. 【转】ABP源码分析二十四:Notification

    NotificationDefinition: 用于封装Notification Definnition 的信息.注意和Notification 的区别,如果把Notification看成是具体的消息 ...

  9. ABP源码分析三十四:ABP.Web.Mvc

    ABP.Web.Mvc模块主要完成两个任务: 第一,通过自定义的AbpController抽象基类封装ABP核心模块中的功能,以便利的方式提供给我们创建controller使用. 第二,一些常见的基础 ...

最新文章

  1. 车坛刮起了一阵文艺风
  2. Openlayers中使用Image的rotation实现车辆定位导航带转角(判断车辆图片旋转角度)
  3. crontab快速上手
  4. mysql 5.6 gtid 主从_MySQL5.6基于GTID的主从复制
  5. mysql32位的能装在64位的电脑上吗,mysql32位能装64位电脑【excle中怎么将log值变回原来的数据库】...
  6. phpcms后台系统怎么去掉html目录_高标准 Vue+Antd 后台系统VueAntdAdmin
  7. 不招聘数据科学家的 7 个理由!
  8. JAVA反射机制、Class类及动态加载、成员变量构造方法其他方法的反射与调用、代理模式AOP
  9. bigemap 百度教程
  10. debian7修改密码
  11. 项目经理面试问题整理与技巧分析
  12. mocha java mv_代码覆盖Mocha
  13. 获取今日头条街拍图片
  14. WordPress好看的自适应企业站Start主题
  15. 家用宽带搭建个人服务器(二)
  16. 小程序源码放自己服务器上,小程序源码怎么安装到自己服务器?
  17. Kafka 入门教程(超详细)
  18. ESC32硬件---电路分析二(电流检测和反电动势检测)
  19. 新冠病毒爆发如何预防?用Python模拟病毒应对策略(附代码)
  20. 【蓝桥杯-单片机学习笔记(十四)】DS1302

热门文章

  1. 【OS学习笔记】二十七 保护模式八:任务切换的方法之----jmp与call的区别以及任务的中断嵌套
  2. CSS3---4.伪元素选择器
  3. SQLServer 的存储过程与java交互
  4. 微信小程序UI组件、开发框架、实用库...
  5. 基于MLlib的机器学习--协同过滤与推荐
  6. 关于非root用户配置ssh运行环境
  7. 207. Course Schedule
  8. [区块链与密码学][王小云院士][部分PPT][20200507]
  9. CodeForces 895 B. XK Segments 二分查找
  10. linux自动挂载磁盘命令,使用mount命令配置Linux自动挂载