【发布时间】:2010-10-24 10:33:46
【问题描述】:
在大型应用程序中,我发现自己真的希望我有内置的 AOP 工具。在 C# 中,你能做的最好的事情就是工厂和 RealProxys、PostSharp、ICorDebug、ICorProfiler 或注入框架。没有干净的内置方式来执行 AOP。
是否有任何迹象(博客文章/内部讨论)表明 AOP 正在进行中?
【问题讨论】:
在大型应用程序中,我发现自己真的希望我有内置的 AOP 工具。在 C# 中,你能做的最好的事情就是工厂和 RealProxys、PostSharp、ICorDebug、ICorProfiler 或注入框架。没有干净的内置方式来执行 AOP。
是否有任何迹象(博客文章/内部讨论)表明 AOP 正在进行中?
【问题讨论】:
Romain 的回答(几乎 :) 完美地涵盖了当前的解决方案。至于未来的支持,Anders Hejlsberg 有previously stated 表示他们对 AOP 处于观望状态。
我们只能希望通过 csc 的托管重写和“编译器即服务”,可以插入编译器,并在那里注入方面。
【讨论】:
我还没有听说过“干净的内置 AOP 方式”。但正如你所说,已经有很多“干净的 AOP 方法”,使用成熟而强大的框架,如 PostSharp 或 Castle DynamicProxy。
使用 BCL 进行 AOP 的一种明显方法是使用 .NET Remoting 堆栈中的透明且真实的代理,这种方法具有很强的局限性。
另一种方法是依靠 System.Reflection.Emit 来动态生成代理,比如,嗯,来自 Castle 的 DynamicProxy。
最后,还有另一个微软官方标记的解决方案,它与Enterprise Library 一起提供。我说的是Policy Injection Application Block。 Unity 还提供了一些利用 PIAB 的拦截功能。
【讨论】:
Spring.NET 也提供 AOP。它需要进行大量配置,但一旦设置好,它就会运行良好。
【讨论】:
5 月发布的 Delphi Prism 在语言级别支持 AOP。
您可以在这里找到更多信息
http://prismwiki.codegear.com/en/Cirrus
这个位置还有一个方面的开源库
【讨论】: