MVVM-light中的清理vs Dispose(bool)

Bud*_*dda 21 .net silverlight mvvm mvvm-light

在最新版本的MVVM-light(V3 SP1)中,ViewModel类中的"Dispose()"和"Dispose(bool)"方法都被标记

不再使用此方法,将在以后的版本中删除它.请改用ICleanup.Cleanup()

这是否意味着不能在从GalaSoft.MvvmLight.ViewModelBase派生的所有ViewModel类中实现IDisposable接口(并且必须覆盖清理)?

如果是,使用不能用于视图模型实例......可能我不明白的东西......请澄清......这种清理有什么好处?

谢谢.

LBu*_*ion 29

这个问题是历史性的.起初我认为强制所有虚拟机都是IDisposable是个好主意.但是,IDisposable有不同的意图:一旦VM被处置,预计(按照惯例)它将尽快被垃圾收集.在与朋友交谈之后,我意识到强制所有虚拟机都是IDisposable是一个错误.这就是我用ICleanup取代IDisposable的原因.ICleanup的目的是提供一种清理VM的方法(例如将其状态刷新到持久存储,关闭流等......)但不一定要尽快将它们垃圾收集起来.

没有什么能阻止您使VM实现IDisposable.我只是不想在ViewModelBase类中保留这个约束,这就是为什么在V4中删除这个接口的原因.

拥有ICleanup的好处是,您可以在ViewModelLocator.Cleanup()的一次调用中清理所有VM.这是VM开发人员的一个提示,即虚拟机应该考虑为其虚拟机提供清理方法.

那有意义吗?干杯,洛朗

  • @Budda我认为LBugnion所说的是他用于IDisposable的概念已经超载了GC的想法尽快.但是,我们很多人一遍又一遍地使用相同的VM对象,因此不是处理对象ViewModelBase而是给出了一个ICleanUp接口,其目的是擦除VM Clean,以便可以再次使用它.如果您正在执行VM第一种方法,WPF不会丢弃View然后重新创建它,而是像VM一样清理它,这可能很有用. (4认同)