这段时间一直在研究 AOP 在 dotNet 中的实现。倒是找到了三四个这方面的例子,但是用起来总感觉有那么一点缺憾——
1 AspectSharp
优点:可以引入自定义的上下文信息。
缺点:要遵循相应的语言规范进行编码来构造所需的 Aspect 及 PointCut ,感觉不如 xml 文件正规和方便。
2 NAOP(AOP.NET)
优点:通过 xml 配置文件来定义 Aspect 和 PointCut ,方便直观。
缺点:无法引入所需的上下文信息,功能受到很大的限制。(或许是可以引入,而我没有找到相应的办法)
3 AOP on MSDN
优点:利用可扩展的元数据来定义 Aspect 和 PointCut ,充分利用了 dotNet 的语言特性的优势。
缺点:上下文信息必须通过继承 System.ContextBoundObject 类才能获得。由于 C# 语言不支持多继承,因此使用范围受到了很大的限制。
或许是 dotNet 起步较晚,再加上 AOP 思想本身也不够成熟吧,至今没有找到一个比较完美的实现。如果实在等不及的话,只能在这些开源项目的基础上改一改,先满足自己的需求再说了。