应用AOP

我一直在使用一些基本的AOP风格解决方案来解决安全性,日志记录,validation等交叉问题。我的解决方案涉及Castle Windsor和DynamicProxy。 我走了这条路,因为我可以使用基于Boo的DSL来应用所有内容,并保持我的代码清除属性。 周末我被告知要看看PostSharp,因为它应该是一个“更好”的解决方案。 我已经快速浏览了PostSharp,但是我被属性使用所拖延了。

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

我只看了很短的时间(至少)城堡 – 温莎,所以我不能评论,但我确实使用了postharp。

Postsharp通过编译时编织工作。 它会为您的构建广告一个后编译步骤,它会修改您的代码。 编译代码就好像您只是将横切问题编程到代码中一样。 这比运行时编织更有效,并且由于使用了属性Postsharp非常容易使用。 我认为使用AOP的属性并不像将它用于DI那样有问题。 但那只是我的个人品味。

但…

如果你已经使用城堡进行dependency injection,我没有看到你不应该将它用于AOP的原因。 我认为虽然运行时的AOP比编译时慢一点,但它也更强大。 AOP和DI在我看来是相关的概念,所以我认为使用一个框架是个好主意。 所以我可能会再次看看城堡的东西,下一个项目我需要AOP。

PostSharp的几个小问题……

我使用PostSharp的一个问题是,在使用asp.net时,exception消息的行号由PostSharp注入到asssemblies的IL指令的数量“out”,因为PDB也没有被注入:-)。

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

(希望这是有道理的)