在Delphi中进行面向切面编程(AOP)是否可能?我对本地支持以及第三方解决方案都感兴趣。
我没有特定的问题需要使用AOP解决,只是对研究AOP感兴趣。
http://www.gray-area.org/Research/GenAWeave/提供了原始论文和演示的链接,以及一些转换过程的视频。
也可能可以使用运行时代码插桩来实现这一点。这是一种由一些分析工具使用的技术,可以在不修改原始源代码的情况下将计数器和堆栈跟踪注入到正在运行的代码中。类似的技术可以用于在静态编译的可执行文件中注入横切关注点。PinTool项目就是一个很好的例子。
DSharp库具有AOP功能:
https://bitbucket.org/sglienke/dsharp
更多信息请查看:https://bitbucket.org/sglienke/dsharp
同时,请查看TVirtualMethodInterceptor。
自Delphi 2010以来,它已经在RTL中并允许您在类的所有虚拟方法上进行OnBefore、OnAfter等调用。
仅使用Rtti,而不是编织(比运行时编织快得多)。此调用应涵盖大部分您所需的功能。
Delphi中的ClassHelpers可以实现一定程度的面向切面编程(AOP)。您可以使用ClassHelpers向其他类注入行为,而无需从它们继承。它允许重写现有方法,然后选择性地调用该现有方法。
限制在于您必须为特定类及其子类声明ClassHelper。此外,一个类只能有一个ClassHelper。
这与C#中的扩展方法类似。