Emit学习-实战篇-实现一个简单的AOP框架(二)

已经9点了,就不废话了,直接开讲,今天就简单的介绍下框架中用到的一些接口和属性。昨天把我们关注的切面分成了三类,现在给出这3个接口的定义:

接口定义

/// <summary>
/// 在调用方法体前执行的处理接口
/// </summary>
public interface IPreProcess
{   
    bool PreProcess(MethodContext methodContext);
}
/// <summary>
/// 在调用方法体后执行的处理接口
/// </summary>
public interface IPostProcess
{
    void PostProcess(MethodContext methodContext);
}
/// <summary>
/// 处理方法调用所产生的异常的接口
/// </summary>
public interface IExceptionHandler
{
    void ProcessException(MethodContext methodContext, Exception exception);
}

l  继承IPreProcess接口可以实现对方法执行前的处理,该方法传入一个MethodContext对象,里面包含了方法执行时的一些上下文信息,然后返回一个bool值,指示是否继续执行下面的方法;

l  继承IPostProcess接口可以实现方法执行后的处理,同样传入一个MethodContext对象,与之前不同的是,这次的MethodContext对象中还设置了真正的方法体执行后所得到的结果,用于进行一些后续的处理;

l  继承IExceptionHandler接口可以实现在方法发生异常时的异常处理,该方法中比上面两个方法多了一个Exception参数,该参数表示截获到的异常信息。

对于任意一个接口,每个方法都可以有不止一个的处理程序,框架将按照在配置文件中定义的顺序依次调用执行。下面给出一个进行方法植入后的伪代码示例:

伪代码

public virtual void Test1(string text1)
{
    MethodContext context;
    try
    {
        //调用预处理程序
        if (_addPreProcessLog.PreProcess(context))
        {
            //调用真正的方法
            base.Test1(text1);
            //调用事后处理程序
            _addPostProcessLog.PostProcess(context);
        }
    }
    catch (Exception exception)
    {
        //调用异常处理程序
        _simplyExceptionHandler.ProcessException(context, exception);
    }
}

时间: 2024-11-05 14:26:13

Emit学习-实战篇-实现一个简单的AOP框架(二)的相关文章

Emit学习-实战篇-实现一个简单的AOP框架(一)

周末两天窝在家里,使用Emit做了一个非常简单的AOP框架,当做是这几周学习Emit后的一个实践.东西出来了,自然要和大家分享一下,虽然框架做的比较粗糙.简单,但是也已经能够看到一点AOP的雏形了,用来自己无聊玩玩还是可以的,当然要用到产品中去肯定还需要长期的完善啦. 说起AOP相信园子里很多高手都研究过,园子里好像也有自己的开源AOP项目,不过我时间有限没有细找,同时也发现园子研究AOP理论方面的文章很多,但是好像并没有完整的实现一个简单AOP框架的例子(当然我只是简单的找了一下,如有遗漏恳请

Emit学习-实战篇-实现一个简单的AOP框架(三)

今天来介绍配置文件的定义和加载,先给出配置文件的内容,然后在详细介绍里面各节的含义,以及如何用程序加载配置文件,内容如下: 配置文件 <?xml version="1.0" encoding="utf-8" ?> <AOP> <Regeisty> <IPreProcess> <Aspect id="AddPreProcessLog" value="YQL.TestProject:YQ

php实现的一个简单json rpc框架实例

 这篇文章主要介绍了php实现的一个简单json rpc框架实例,本文给出了RPC服务端和客户端代码以及应用实例,需要的朋友可以参考下     json rpc 是一种以json为消息格式的远程调用服务,它是一套允许运行在不同操作系统.不同环境的程序实现基于Internet过程调用的规范和一系列的实现.这种远程过程调用可以使用http作为传输协议,也可以使用其它传输协议,传输的内容是json消息体. 下面我们code一套基于php的rpc框架,此框架中包含rpc的服务端server,和应用端cl

快速构建一个简单的个人框架系列(2)--FastObject架构(改进)

架构也谈不上,就是一个简单的几个类. 目前FastObject功能还很小,尤其是多表查询和数据库兼容还存在一定的问题. 我们先把这两个问题搁这儿: 1.数据库某些地方的兼容 2.多表查询 为了这两个问题,我对先前的结构做了稍微的修改,后面慢慢就会感觉到. 人活一口气,树活一张皮.虽然上篇文章<快速构建一个简单的个人框架系列(1)--FastObject介绍> 贴出后,经过大家的指点,凸显出太大的不足,但是已经写出来了,就是只剩一口气我也要把它写完,写 不完我也要玩着写,在此感谢提建议的朋友们,

Windows 8 Store Apps学习(64) 后台任务: 开发一个简单的后台任务

介绍 重新想象 Windows 8 Store Apps 之 后台任务 开发一个简单的后台任务 示例 1.通过"Windows 运行时组件"新建一个后台任务 BackgroundTaskLib/Demo.cs /* * 后台任务 * * 注: * 后台任务项目的输出类型需要设置为"Windows 运行时组件",其会生成 .winmd 文件,winmd - Windows Metadata */ using System; using System.Threading

我的编程学习路-想做一个简单对对碰游戏,如何实现游戏界面啊?

问题描述 想做一个简单对对碰游戏,如何实现游戏界面啊? 我目前是大一的学生,编程方面的东西不是很懂,想做一个简单的对对碰游戏,可是运行结果总是不能出现游戏界面,请问我要怎么让那个界面出现呢,是否还要建立包含游戏图片的库??求大神们能和我说一下都需要做些什么 解决方案 做一个简单的游戏服务器 解决方案二: 不知到你的编程环境是什么,windows下可以考虑用MFC.他是windows API 的图形界面库,因该可以满足你的要求.

从零构建一个简单的 Python 框架

这篇文章旨在通过对设计和实现过程一步一步的阐述告诉读者,我在完成一个小型的服务器和框架之后学到了什么.你可以在这个代码仓库中找到这个项目的完整代码.我希望这篇文章可以鼓励更多的人来尝试,因为这确实很有趣.它让我知道了 web 应用是如何工作的,而且这比我想的要容易的多! 为什么你想要自己构建一个 web 框架呢?我想,原因有以下几点: 你有一个新奇的想法,觉得将会取代其他的框架 你想要获得一些名气 你遇到的问题很独特,以至于现有的框架不太合适 你对 web 框架是如何工作的很感兴趣,因为你想要成

快速构建一个简单的个人框架系列(1)--FastObject介绍

哪个程序员没有一个梦?我的梦就是开发一个个人框架,轻量级,无需配置,功能强大但使用简单的 框架. 具体来说: (1).配置简单,简单,很简单.(不要xml映射) (2).轻量级, 很轻,很轻量.(学习成本一定要低) (3).操作方便,很方便,很方便.(写框架就是要方便) (4).数据库兼容,很兼容,很兼容.(至少要兼容Access和MSSQL) 岁月洗涤中,藉靠项目的经验,我终于痛定思痛写下了我的第一个Net2.0的框架--FastObject. 由于惯性和思维定势的影响,最后FastObjec

一个简单的PHP框架实现方法

  非原创,自己集合了类Apode+ DZ模板 + 封装PDO,应用过程就不用看了,和普通框架语法是一样的,看一下实现过程吧,主要学习如何去实现一个框架,等你学会扩展或在上面开发的话,学别的框架也只需要半小时了 几个核心 app.php __autoload(自动加载类) base.class.php abstract class Base {}//数据抽象 action.class.php abstract class Action extends Base {}//继承类 Action(核心