C#/.Net中最佳/最流行的面向切面编程(AOP)方法是什么?

4

在C#/.Net中,最佳/最流行的面向方面编程(AOP)方式是什么?

5个回答

6

DynamicProxy并不完全是AOP,但你可以通过困难的方式来实现。Spring是一个可怕的野兽。 - Ivan G.
@aloneguid,您能告诉我为什么您说“DynamicProxy并不完全是AOP”吗? - Bastien Vandamme

3

Postsharp是另一个知名的AOP框架,它将AOP引入了.NET!虽然我只有非常少的使用经验,但它看起来很好,值得一试。


2
PostSharp已经商业化,不再是一个替代选择! - Ivan G.
1
为什么商业版不是一个选择?问题没有明确指定“非商业版”。此外,PostSharp 仍有一个免费版本(即使在您的商业产品中也可以免费使用)。 - Matthew Groves
PostSharp商业化了,对于普通开发人员来说价格真的太贵了。 - Bastien Vandamme
@B413 实际上有一个免费的 Express 版本,支持一些 AOP:http://www.postsharp.net/purchase - Matthias Meid
闭源的简化版本对我来说不是一个选择。像这样的框架必须是开放的。 - Ivan G.

2

PostSharp很不错。我已经使用它大约一年了。安装方便,学习曲线相对较浅,考虑到它几乎具有神一般的能力。此外,似乎有一个活跃的开发者社区和响应迅速的开发者。

请查看PostSharp主页上的代码示例。那些是使用PostSharp完成的好的简单方面的例子。


太糟糕了它变成商业化了。:( - ktutnik

1

我现在已经使用Spring.Net AOP框架约9个月了。它非常强大,即使织入是在运行时而不是编译期间完成,在使用中也不会对性能造成影响。需要注意的唯一事项是,虽然你要应用advice的对象不需要意识到Spring.Net AOP,但他们必须实现至少一个接口。文档对于Spring.Net总体上来说很好,它指出这种限制将在未来版本中被移除,但没有给出时间表。

Spring.Net AOP并不要求你使用Spring.Net框架的其余部分,可以单独使用。


0

我曾经尝试过自己编写代码来实现不同类型的功能,有些成功了。通常情况下,我会先创建一个接口,再用类来实现它,然后创建一个代理来实现这个接口,执行我想要的任何前置步骤,调用真正对象的方法,最后执行我想要的任何后置步骤。但是,这种方法的主要问题之一是你不能在接口中使用构造函数,也不能在接口中使用静态方法,因此没有真正明显的地方可以放置这种类型的代码。难点在于代码生成,因为你要么会发出IL,要么会发出C#代码,需要进行编译。但这只是我的方法而已。这迫使我逐个考虑每个方面,直到我能够抽象出“Aspect”并以这些术语思考为止。简而言之:要么自己编写代码,要么从Eric Bodden's list中找到你喜欢的工具集。


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