【发布时间】:2010-10-20 19:36:34
【问题描述】:
有没有一种方法可以跟踪和拦截对自动实现的属性中的值的调用?
我想要看起来有点像这样的代码:
[Tracked]
public int SomeProperty { get; set; }
理想情况下,该属性将能够拦截对属性值的更改。这可能吗?
我不希望它有第二段代码稍后在对象上旋转并请求值,而是属性应该在设置值时附加值。
【问题讨论】:
标签: c# .net attributes aop
有没有一种方法可以跟踪和拦截对自动实现的属性中的值的调用?
我想要看起来有点像这样的代码:
[Tracked]
public int SomeProperty { get; set; }
理想情况下,该属性将能够拦截对属性值的更改。这可能吗?
我不希望它有第二段代码稍后在对象上旋转并请求值,而是属性应该在设置值时附加值。
【问题讨论】:
标签: c# .net attributes aop
没有。你这样做的方式是不使用自动属性。唯一可能的解决方案是使用 Castle AOP 之类的东西来围绕您的类创建自动包装器并跟踪更改,但这是很多难以实现的工作。
【讨论】:
如果您想要一个在运行时工作的解决方案,那么您将需要一个面向方面的编程 (AOP) 框架;我使用CciSharp 取得了一些成功。它不像 PostSharp 那样成熟,但遵循相同的基本原则:它会修改您已经编译的代码,生成另一个程序集。
如果您只是希望它用于测试(或分析),那么还有另一种选择:Microsoft Moles(也是免费的)。它的工作方式非常不同;它使用“detour”类型的注入在程序运行时更改程序,拦截属性 getter 和 setter 方法。
【讨论】: