2

我发现了很多 DynamicProxy 示例,用于在对象中的属性更改时执行额外的工作,但是我如何不仅在拦截器中设置属性值(通过调用Proceed()),而且如果在拦截过程中出现问题,还可以将其回滚本身?

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

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

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

我想知道它是怎么做到的。

我最终都使用了INotifyPropertyChanging(并稍微扩展了这个界面)和INotifyPropertyChanged. 仅仅因为验证应该在实际设置之前进行,因为

  • 事件的顺序是不确定的,因此设置的实际使用者可以在它被验证之前得到通知,当你只使用INPChanged
  • 总的来说,验证和消费是不同的,应该有不同的事件:一个在设置发生之前(以防止它发生),一个在之后 - 当属性的实际值已经更新时(代码按预期工作) .

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

4

0 回答 0