在C#/.Net中,最佳/最流行的面向方面编程(AOP)方式是什么?
Spring.Aop
命名空间提供了AOP功能。Postsharp是另一个知名的AOP框架,它将AOP引入了.NET!虽然我只有非常少的使用经验,但它看起来很好,值得一试。
PostSharp很不错。我已经使用它大约一年了。安装方便,学习曲线相对较浅,考虑到它几乎具有神一般的能力。此外,似乎有一个活跃的开发者社区和响应迅速的开发者。
请查看PostSharp主页上的代码示例。那些是使用PostSharp完成的好的简单方面的例子。
我现在已经使用Spring.Net AOP框架约9个月了。它非常强大,即使织入是在运行时而不是编译期间完成,在使用中也不会对性能造成影响。需要注意的唯一事项是,虽然你要应用advice的对象不需要意识到Spring.Net AOP,但他们必须实现至少一个接口。文档对于Spring.Net总体上来说很好,它指出这种限制将在未来版本中被移除,但没有给出时间表。
Spring.Net AOP并不要求你使用Spring.Net框架的其余部分,可以单独使用。
我曾经尝试过自己编写代码来实现不同类型的功能,有些成功了。通常情况下,我会先创建一个接口,再用类来实现它,然后创建一个代理来实现这个接口,执行我想要的任何前置步骤,调用真正对象的方法,最后执行我想要的任何后置步骤。但是,这种方法的主要问题之一是你不能在接口中使用构造函数,也不能在接口中使用静态方法,因此没有真正明显的地方可以放置这种类型的代码。难点在于代码生成,因为你要么会发出IL,要么会发出C#代码,需要进行编译。但这只是我的方法而已。这迫使我逐个考虑每个方面,直到我能够抽象出“Aspect”并以这些术语思考为止。简而言之:要么自己编写代码,要么从Eric Bodden's list中找到你喜欢的工具集。