2014-02-08 106 views
0

我有我想要缓存(他们的过去值)值的类的属性。对象本身会跟踪它们的变化,但我希望能够用一个简单的属性来标记我想跟踪的属性。我怎样才能监视属性的变化,没有任何手动代码每个属性?什么是通过属性监视属性的优雅方式?

+0

[团结拦截(http://msdn.microsoft.com/en-us/library/dn178466%28v=pandp.30%29.aspx)是一种选择 - 包装所有的实例和之前捕获信息/后调用。与属性无关,所以没有答案...(我不完全确定你的意思是“通过属性监视”,因为属性并不意味着/自己做任何事情)... –

+0

@AlexeiLevenkov我想创建一个系统,当一个属性被标记了一个属性时,其更改会被其他子系统自动监控。 –

+0

您可能想要添加代码的样子,使其看起来像答案 - 样本对象和对象的样本创建......还要注意,您是否已经有了类似于“INotifyPropertyChanged”的东西。 –

回答

0

使用通用代理模式。 有很多代理生成器,但您可以使用远程处理提供的真实/透明代理。

拦截对财产的呼叫,并做你想做的事情。

0

如果你想要一个属性来扩展或改变一个属性的行为的东西,如监控,缓存,验证或登录你可能要考虑AOP (Aspect Oriented Programming)a good white paper can be found here too

在.NET中最常见的AOP工具Post Sharp

将该库/工具集成到您的解决方案和Visual Studio中,它将查找特定的属性,将其识别为方面并将它们在编译(或运行时,取决于某些因素)应用于目标属性,方法,类,甚至整个程序集。

与帖子锐利,location interception aspect将允许您拦截目标的执行(在执行前,发生错误或发生错误时)并编写一些代码以在发生拦截时执行,并且您将获得有关元数据的信息被拦截的目标(例如PropertyInfo)以及当前被拦截的对象实例或发生的错误。

有一些预先定义的方面(属性)与锐利后打包,你可以立即使用它们,或者你可以创建自己的方面(属性)与任何不同的行为。