关于c#:应用面向方面的编程

关于c#:应用面向方面的编程

Applying Aspect Oriented Programming

我一直在使用一些基本的AOP样式解决方案来解决诸如安全性,日志记录,验证等跨领域问题。我的解决方案围绕Castle Windsor和DynamicProxy,因为我可以使用基于Boo的DSL来应用所有内容,并使代码保持属性清洁 。 周末我被告知要看一下PostSharp,因为它应该是一个"更好"的解决方案。 我快速浏览了PostSharp,但是由于Attribute的使用而感到不满意。

是否有人尝试过两种解决方案,并愿意分享他们的经验?


PostSharp的几个小问题...

我对PostSharp的一个问题是,在使用asp.net时,由于PostSharp注入了程序集中的IL指令的数量也未插入PDB,因此异常消息的行号被"淘汰"了。

另外,如果在运行时没有可用的PostSharp程序集,则会发生运行时错误。使用Windsor,可以在以后关闭横切面而无需重新编译代码。

(希望这很有意义)


我只看了一下城堡温莎(至今),所以我无法对此发表评论,但我确实使用了postharp。

后锐通过在编译时进行编织来工作。它会在您的构建中添加一个后编译步骤,以在其中修改您的代码。就像您刚刚将横切关注点编程到代码中一样,代码被编译。这比运行时编织更有性能,并且由于使用了属性Postsharp非常易于使用。我认为将属性用于AOP并不像将属性用于DI那样麻烦。但这只是我的个人品味。

但...

如果您已经使用Castle进行依赖项注入,那么我不认为您不应该将Castle也用于AOP的充分理由。我认为,尽管运行时的AOP比编译时要慢一些,但它的功能也更强大。在我看来,AOP和DI是相关的概念,因此我认为对两者使用一个框架是一个好主意。因此,在下一个我需要AOP的项目中,我可能会再次看看城堡的东西。


推荐阅读