使用Unity实现AOP编程.docVIP

  • 30
  • 0
  • 约1.32千字
  • 约 6页
  • 2016-10-20 发布于重庆
  • 举报
使用Unity实现AOP编程

基于微软企业库的开发框架使用Unity实现AOP编程 - hjtcyxf的专栏 - CSDN博客 默认分类 2009-08-19 01:29:34 阅读222 评论0字号:大中小 基于微软企业库的开发框架使用Unity实现AOP编程 目标: 在日常开发系统中,常常遇到一些系统的横切关注点,如日志、事务、异常等等。我们的目标是使用Unity这一IoC容器把这些横切关注点和业务逻辑相分离 实现方式:详细开发步骤: 首先,这些AOP都是针对应用层的对象的,如“创建客户帐号用例控制器” 下面是“创建客户帐号用例控制器”的注册代码(在“注册业务处理”代码块中): 我们每创建一个“用例控制器”,就要用以上两行代码进行注册 在具体页面中(如:“创建客户帐号”页面),创建一个用例控制器的属性,此属性并且要有Dependency定制特性(为了让它放在Unity容器中),如下图: 这样我们就能调用此控制器的相关接口来实现用例目标了 上面不是说用例控制器属性上有个定制特性Dependency嘛,让我们看看BasePage中的InjectDependencies方法,它就是用来把整个页面的实例放到容器中去 用例控制器的所有公共成员,都应把他抽取到相应的接口中: 这样做的目的有二: 想一下,每个用例控制器都对应一个用例,那么用例控制器的公有成员应对应于用例的输入输出、系统事件,这样也更加符合面向接口编程的原则 由于要实现AOP编程,我们必须要对用例控制器的方法进行拦截。使用Unity,我就可以做到,这里用的是接口拦截(InterfaceInterceptor)。 透明代理拦截器(TransparentProxyInterceptor),利用微软的Remoting机制,让被代理的类继承MarshalByRefObject,从而实现拦截。但这样做在性能上会有一定损失 接口拦截(InterfaceInterceptor):利用微软的Emit方式(即静态织入),在编译成IL时把拦截方法织入,但被拦截的类必须实现接口。我们采取的就是这种方式 在接口的方法中声明AOP的Attribute: 上面的Execute实现了3个Attribute,分别是事务(Transacation),日志(Log)、异常(Exception)。 当然,这3个Attribute是自定义的,下面会进行阐述。现在我只要知道如要进行AOP编程,只要在方法上写上相应的Attribute就行了。 至此,我们在用例控制器上的AOP代码已经完成,下面让我来说说上面的自定义Attribute是怎么实现的 所有的自定义核心代码库都在“EntLibSharp.Core.AOP”项目中: 项目可以分两个部分:Attribute,就是我们上面看到的方法上的定制特性;Handler,实际的拦截处理程序 下面已事务为例进行说明: 好了,到此为止,Attribute和Handler都已完成,我们在用例控制器的方法中就能用定制特性进行AOP编程了 开发框架源代码(VS2008)

文档评论(0)

1亿VIP精品文档

相关文档