ABP之AOP初显威

技术和框架要点

ABP
AOP
IOC
Castle

AOP

AOP,面向切面编程,通过运行期动态代理实现程序功能的统一维护的一种技术,可以再代码运行期间改变目标函数的行为。

ABP框架BackgroundWork

可参考:
ABP框架理论学习之后台工作(Jobs)和后台工作者(Workers)
Background Jobs And Workers

使用AOP提供的BackgroundJob,如何在不修改框架的基础之上记录每个BackgroundJob的运行信息呢?比如:运行结果、运行时间、Job名称、错误信息、运行耗时等信息。
方案有两种:

  1. 继承自框架的BackgroundJob类,编写符合要求的基类
  2. 使用AOP动态代理所有继承自BackgroundJob并且代理Execute方法

示例代码

ABP模块以及初始化

ABP之AOP初显威_第1张图片
main.png
ABP之AOP初显威_第2张图片
启动模块.png
ABP之AOP初显威_第3张图片
运行结果.png

定义后台工作并测试运行

  1. 定义后台工作者,可参考第三节

    ABP之AOP初显威_第4张图片
    定义后台工作者.png

    定义后台工作需要注意:必须有参数类、Job必须继承自BackgroundJob基类和ITransientDependency接口

  2. 在程序主入口启动后台工作者


    ABP之AOP初显威_第5张图片
    启动后台工作者.png

    ABP之AOP初显威_第6张图片
    运行结果.png

经过以上步骤,表示后台工作JOB正常运行。

定义和注册拦截器

ABP之AOP初显威_第7张图片
定义拦截器.png

ABP之AOP初显威_第8张图片
注册拦截器方法.png

ABP之AOP初显威_第9张图片
Module中注册拦截器.png

注意必须是在Module的PreInitialize()方法中注册.

ABP之AOP初显威_第10张图片
运行结果.png

测试异常信息

在JOB内容抛出异常,修改JOB方法如下


ABP之AOP初显威_第11张图片
抛出异常.png
ABP之AOP初显威_第12张图片
添加触发异常的job.png

ABP之AOP初显威_第13张图片
运行结果.png

注意观察两次JOB的运行结果。

总结

根据以上代码实例,我们发现AOP带来以下好处:

  1. 不用修改框架代码
  2. 不用自定义继承自框架代码

扩展

  • 在示例代码中是用Console.WriteLine 输出信息,在实际代码中,可以使用EventBus来触发事件,其他模块代码处理Event,这样可以做到不同的信息记录方式,即可以输出到日志文件,也可以保存到数据库

你可能感兴趣的:(ABP之AOP初显威)