我一直在使用一些基本的 AOP 风格解决方案来解决安全、日志记录、验证等横切问题。我的解决方案围绕 温莎城堡 和动态代理。我走这条路是因为我可以使用基于 Boo 的 DSL 来应用所有内容,并保持我的代码不含属性。有人告诉我周末去看看 后锐利 因为它应该是一个“更好”的解决方案。我快速浏览了一下 PostSharp,但对属性的使用却感到厌烦。

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

有帮助吗?

解决方案

我只看了很短一段时间的温莎城堡,所以我不能对此发表评论,但我确实使用了 postsharp。

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

但...

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

其他提示

PostSharp 的几个小问题...

我在使用 PostSharp 时遇到的一个问题是,在使用 asp.net 时,异常消息的行号会被 PostSharp 注入程序集的 IL 指令数量“超出”,因为 PDB 也没有注入:-)。

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

(希望这是有道理的)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top