C#中内置的AOP功能-是否正在路上?

29

在大型应用程序中,我发现自己真的很希望有内置的AOP功能。就目前而言,在C#中,您能做到的最好的方法是使用工厂和RealProxys、PostSharp、ICorDebug、ICorProfiler或注入框架。没有干净的内置方式来实现AOP。

是否有任何迹象表明(博客文章/内部讨论),表明AOP正在途中?

4个回答

11

Romain的回答几乎完美地涵盖了当前的解决方案。至于未来的支持,Anders Hejlsberg已经先前表示他们正在等待和观察AOP。

我们只能希望随着csc的托管重写和“编译器作为服务”的推出,人们可以插入编译器并在其中注入方面。


你们在Mono中使用原生AOP吗? - Sam Saffron
关于AOP,Mono没有什么特别的。我们已经有了一个受控编译器,虽然很容易被黑客攻击,但它是一个很好的起点,可以让一些东西感觉更加整合到编译器中。 - Jb Evain
1
看看这个,显然不会发生:http://www.sharpcrafters.com/blog/post/AOP-in-C-Over-Anders-Hejlsberge28099s-Dead-Body!.aspx - Anthony Johnston

9
我没有听说过“干净内置的AOP方法”。但正如你所说,已经有很多“干净的AOP方法”,使用成熟而强大的框架,比如PostSharpCastle DynamicProxy
使用BCL,一个明显的做AOP的方法,虽然有一些限制,是使用透明和真实代理,来自.NET Remoting堆栈。
另一种方法是依赖于System.Reflection.Emit来动态生成代理,例如,从Castle的DynamicProxy。
最后,还有另一个官方的Microsoft标记解决方案,随着Enterprise Library一起提供。我说的是Policy Injection Application BlockUnity也提供了一些拦截功能,利用PIAB。

2
PostSharp已经商业化,这对于这种类型的库来说并不合适。 - Ivan G.
1
@aloneguid 我非常确定V1.5仍然是免费的,并且提供比许多其他静态编织器更多的功能。此外,为什么您认为某些库可以商业化而其他一些库则不能呢? - Romain Verdier
更新Unity拦截文档的链接:http://msdn.microsoft.com/en-us/library/ff660891(PandP.20).aspx - Grigori Melnik

2

Spring.NET 也提供了 AOP 功能。虽然配置比较繁琐,但一旦设置好就能很好地发挥作用。


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接