2011-04-08 15 views

回答

29

你可以尝试各种IOC容器,配备了AOP开箱即用(例如Spring.Net有一个强大的AOP freamework,温莎城堡有Interceptors也是如此Unity),使用Snap那些或使用IL-织女像Postsharp

更新 我只是发现了关于“Afterthought”的 - 尽管在开发的早期 - 看起来很有希望。它的目标是成为Postsharp的一个开源替代品。

我忘了提Mono.Cecil它能够IL编织以及:

在简单的英语,与塞西尔,可以加载现有的管理组件,浏览所有包含的类型,修改它们的飞行并将修改后的程序集保存到磁盘。

Fody使用Cecil进行编织,并允许在构建阶段集成该步骤。它带有一些方便的插件(例如在编译后实现INotifyPropertyChanged或从公共属性生成ToString方法)。

5
+0

+1适用于PostSharp,它非常强大且非常易于使用 – 2011-04-09 00:07:17

8

我一直在四处寻找完全相同的东西,我可以很自信地告诉你.Net中没有任何东西可以在各方面与AspectJ进行远程比较。

在.net世界中,我发现动态代理经常用作AOP机制。 只有少数支持像Postharp和Afterthoughts这样的实际IL编织的工具,它们都可以通过属性声明性编程来实现Aspect Orientation。它们都易于使用,但是如果您来自AOP背景(AspectJ),我不确定它们会是您称为AOP的。

到目前为止,我还没有看到任何.Net实现的“真正”AOP模式(正如十年前正式定义的那样,即切入点,连接点,建议,方面等),可能是因为很少有人意识和兴趣一般来说,AOP的常用用途通常局限于日志记录,事务管理和异常策略,而IoC和属性通常就足够了。

在.NET的这个阶段,商业规则和域驱动代码的AOP仍然很少被看到(也没有被任何工具支持)。

我最近遇到的只有一个开源项目似乎开始填补这个空白(http://sheepaop.codeplex.com),看起来还很早,但看起来像是一个AspectJ-ish实现。正如我前面所说,它仍然不会与AspectJ(根据你的问题)进行比较,但这种相似性非常明显,似乎是故意的。

2

由于问题与.NET有关,因此您可以使用Nemerle语言,它具有强大的元编程功能。

+1

Nemerle还允许编译具有宏属性的C#源代码。 这样你就可以用C#获得AOP。 – 2013-04-05 18:59:23

+0

这是否意味着Nemerle编译器包含C#编译器? – ironic 2013-04-08 08:30:40

+0

是的,Nemerle可以解析C#源代码并编译它。您可以将.cs文件添加到您的项目中,并且它可以工作。无论如何,你可以写任何前端Nemerle编译器,如VB.Net,源代码在这里:https://github.com/rsdn/nemerle/tree/master/snippets/csharp-parser – 2013-04-14 11:37:13