【问题标题】:Applying Aspect Oriented Programming应用面向方面的编程
【发布时间】:2010-09-08 22:24:38
【问题描述】:

我一直在使用一些基本的 AOP 风格的解决方案来解决安全、日志记录、验证等横切问题。我的解决方案围绕 Castle Windsor 和 DynamicProxy 因为我可以使用基于 Boo 的 DSL 应用所有内容并保留我的代码清理属性。周末有人告诉我看看PostSharp,因为它应该是一个“更好”的解决方案。我快速浏览了 PostSharp,但我被 Attribute 的使用所推迟。

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

【问题讨论】:

    标签: c# castle-windsor aop castle-dynamicproxy


    【解决方案1】:

    PostSharp 的几个小问题...

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

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

    (希望这是有道理的)

    【讨论】:

    • 这是我偶然发现的一个相当古老的答案,但我只是想指出 PostSharp 现在确实转换了 PDB 文件,因此不再存在调试问题(请参阅:stackoverflow.com/questions/2006508/…
    【解决方案2】:

    我只看了一小段时间(目前),所以我无法对此发表评论,但我确实使用了 postsharp。

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

    但是……

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

    【讨论】:

      猜你喜欢
      • 2010-11-24
      • 2010-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-28
      • 1970-01-01
      • 2012-09-03
      • 2010-09-19
      相关资源
      最近更新 更多