应用AOP

时间:2020-03-05 18:53:26  来源:igfitidea点击:

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

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

解决方案

回答

我只看了很短一段时间(至今),所以我无法对此发表评论,但我确实使用了postharp。

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

但...

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

回答

PostSharp的几个小问题...

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

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

(希望这很有意义)