【问题标题】:What are the best/most popular ways to do aspect-oriented programming (AOP) in C#/.Net?在 C#/.Net 中进行面向方面编程 (AOP) 的最佳/最流行的方法是什么?
【发布时间】:2008-09-25 15:22:04
【问题描述】:

在 C#/.Net 中进行面向方面编程 (AOP) 的最佳/最流行的方法是什么?

【问题讨论】:

    标签: c# .net aop


    【解决方案1】:
    • 来自城堡的DynamicProxy 是 可能是最常用的工具 在 CLR 上执行 AOP。
    • Spring framework 还提供 AOP 能力通过其 Spring.Aop 命名空间。

    【讨论】:

    • DynamicProxy 并不完全是 AOP,但是您可以用硬方式归档它。春天是一种可怕的野兽。
    • @aloneguid 我能知道你为什么说“DynamicProxy 不完全是 AOP”吗?
    【解决方案2】:

    Postsharp 是另一个著名的:“将 AOP 引入 .NET!”我对它的经验很少,但它看起来不错,值得一看。

    【讨论】:

    • PostSharp 商业化了,不再是替代品了!
    • 为什么不是商业替代品?问题未指定“非商业”。此外,还有免费版本的 PostSharp(甚至可以在你的商业产品中免费使用)
    • PostSharp 商业化了,对于一个简单的开发人员来说真的太贵了。
    • @B413 其实有一个免费的Express版支持一些AOP:postsharp.net/purchase
    • 封闭源代码缩减版不是一种选择,至少对我来说是这样。像这样的框架必须是开放的
    【解决方案3】:

    PostSharp 很好。我已经使用它大约一年了。考虑到它所提供的近乎神一般的力量,它易于安装并且学习曲线相当浅。此外,似乎既有活跃的开发者社区,也有响应迅速的开发者。

    查看 PostSharp 主页上的代码示例。这些都是使用 PostSharp 完成简单方面的好例子。

    【讨论】:

    • 太糟糕了,它商业化了。 :(
    【解决方案4】:

    我已经使用 Spring.Net AOP Framework 大约 9 个月了。即使编织是在运行时而不是在编译期间完成的,它也非常强大,并且似乎不会在使用中造成性能损失。唯一需要注意的是,尽管您应用建议的对象不需要了解 Spring.Net AOP,但它们必须至少实现一个接口。顺便说一下,对于 Spring.Net 而言,该文档通常非常出色,它指出此限制将在未来的版本中删除,但没有给出路线图。

    Spring.Net AOP 不需要您使用 Spring.Net 框架的其余部分,可以单独使用。

    【讨论】:

      【解决方案5】:

      我玩过自己的滚动,用于几种不同类型的东西。我有一些运气。一般来说,我创建一个接口,用一个类实现它,然后创建一个实现接口的代理,执行我想要的任何前置条件步骤,调用真实对象的方法,然后执行我想要的任何后置条件步骤。我对这种方法的主要烦恼之一是接口中不能有构造函数,接口中也不能有静态方法,因此没有明显的地方可以放置这种类型的代码。最难的部分是代码生成——因为你要么要生成 IL,要么要生成必须编译的 C#。但这只是我的方法。它迫使我一次只考虑一个方面,真的——我还没有达到可以抽象出“方面”并以这些术语思考的地步。简而言之:自行开发或找到您喜欢的工具集,可能来自Eric Bodden's list

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-06-10
        • 1970-01-01
        • 2010-09-21
        • 1970-01-01
        • 1970-01-01
        • 2020-10-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多