使用Castle DynamicProxy回滚属性更改

时间:2012-08-28 19:23:28

标签: c# .net interceptor castle castle-dynamicproxy

我发现很多DynamicProxy的例子用于在对象中更改属性时执行其他工作,但是我如何设置拦截器中的属性值(通过调用Proceed()如果在拦截过程中出现问题,还会回滚吗?

这里的用例是这样的:我使用设置对象为系统的某些部分提供设置值,因此它们不必使用配置后端。

这些对象也是INotifyPropertyChanged,因此如果有人在运行时更改了设置,那么拥有该对象的组件会收到有关更改的通知,并可以动态执行重新配置。

所以我需要做的是回滚属性的更改,如果PropertyChanged事件处理程序抛出异常(更改导致配置错误或无效)。

我想知道如何做到这一点。

我最终同时使用INotifyPropertyChanging(并稍微扩展了此接口)和INotifyPropertyChanged。只是因为验证应该在之前实际设置,因为

  • 事件的顺序未确定,因此当您仅使用INPChanged
  • 时,设置的实际使用者可以在甚至验证之前获取通知
  • 并且整体验证和消费是不同的,应该有不同的事件:一个在设置发生之前(以防止它发生)和一个之后 - 当属性的实际值已经更新时(为了使代码工作)正如所料)。

当我现在看这个时,原始设计(问题所在)对我来说似乎很糟糕。

0 个答案:

没有答案