很早就注意到AOP将带来一些新的气象,不过AOP的一些思想在.NET里应该是有体现的.如果你做过ASP.NET的filter过滤,可能就会比较容易理解了.
和以往一样,我这不过多谈理论,你可以随便找到一把文章.
接下来的例子可以下载:
https://files.cnblogs.com/QPG2006/AopDemo.rar
没有把它集成到GPG_Demo方案中是避免影响其他例子的效果,下面开始吹牛了,请打起精神.
AOP是想有更加省事省时的办法现有操作扩展一些行为,常见的是日志操作和权限判断.
当然你也可以手工在那些需要的调用前执行加入扩展行为,只是确实挺麻烦的.
我们下面的例子有两个意图:
1) 对所有方法和属性设置进行日志操作
2) 只允许经理去调整产品的价格
下面的例子是演示如何利用Castle.DynamicProxy来实现,实际应用就比较麻烦,但是能说明思路.
你可以执行Step1下的测试来看看结果.代码如下:
如果在真的项目里使用,采用castle集成的Aspect#会好些,你要配置如下的文件(在step2项目里有):
<?xml version="1.0" encoding="utf-8" ?>

<configuration>
<components>
<component id="salemgr" type="Castle.AopDemo.Components.SaleMgr, AOP">
<parameters>
<Role>Role.Manager</Role>
</parameters>
</component>
<component id="product" type="Castle.AopDemo.Components.Product, AOP">
<parameters>
<name>P1</name>
<price>100</price>
<num>5</num>
</parameters>
</component>
</components>
<facilities>
<facility id="aspectsharp" type="Castle.Facilities.AspectSharp.AspectSharpFacility,Castle.Facilities.AspectSharp">
<
import Castle.AopDemo.Mixins in AOP

import Castle.AopDemo.Interceptors in AOP

aspect LogForProperty for [Castle.AopDemo.Components]
include SecurityMixin
pointcut propertywrite|method(*)
advice(Castle.AopDemo.Interceptors.LoggerInterceptor)
end
end


]]>
</facility>
</facilities>
</configuration>
下面是演示片断:
限于篇幅,还是请有兴趣的读者下载示例看效果吧,我就不截图了。