代码之家  ›  专栏  ›  技术社区  ›  ilivewithian

跟踪对自动实现属性的调用

  •  5
  • ilivewithian  · 技术社区  · 14 年前

    有没有方法可以跟踪和拦截对自动实现的属性中的值的调用?

    我想要一个有点像这样的代码:

    [Tracked]
    public int SomeProperty { get; set; }
    

    理想情况下,属性能够拦截对属性值的更改。这可能吗?

    3 回复  |  直到 14 年前
        1
  •  4
  •   Pieter van Ginkel    14 年前

    不。你这样做的方法是不使用自动属性。唯一可能的解决办法就是 Castle AOP 在类周围创建自动包装器并跟踪更改,但这是一项很难实现的工作。

        2
  •  3
  •   Noon Silk    14 年前

    您应该能够使用AOP框架来实现这一点,比如 PostSharp (我注意到现在是商业性的)。还有一些联系 here ,但有些链接已经死了。

        3
  •  3
  •   Stephen Cleary    14 年前

    如果您想要一个在运行时工作的解决方案,那么您需要一个面向方面的编程(AOP)框架;我已经使用了 CciSharp 取得了一些成功。它不像PostSharp那么成熟,但工作原理是一样的:它将修改已经编译的代码,生成另一个程序集。

    如果您只是想将其用于测试(或分析),则有另一个选项: Microsoft Moles (也是免费的)。它的工作方式非常不同;它使用“迂回”类型的注入来在程序运行时更改程序,截取属性getter和setter方法。