处理viewModel

时间:2012-06-29 03:24:22

标签: c# wpf

我的一个视图模型包含对服务控制器的引用。 我在这个视图模型上实现了IDisposable。 现在,我在其他一些viewModel中创建了这个viewmodel的List。 我是否需要在其他viewmodel上实现IDisposable。

2 个答案:

答案 0 :(得分:2)

我回过头来询问你的视图模型如何获得对ServiceController的引用。你是否将它作为依赖注入? ServiceController的寿命是否比ViewModel长?如果ViewModel是创建它,那么Disposable是有意义的,但是如果你注入了这个依赖项,或者它以某种方式在你的“ViewModelA”的实例之间共享,那么它应该不是由该类处理ServiceController。我的意思是,对某些可能合法地在其他地方范围内的对象调用Dispose()是没有意义的。

但是,假设这确实有意义(您有一些内部创建ServiceController的VM列表),那么ViewModelB是否需要实现IDisposable取决于ViewModelA实例的生命周期。如果将这些变量保持为类级别变量,则可能是,您应该将它们丢弃在VMB的IDisposable中。如果在方法中创建,使用和丢弃它们,则不需要。

关于IDisposable的推理实际上就是考虑对象的生命周期。当你有一些需要释放的资源但在实例的生命周期内保持不变时,这是有道理的。并且,当发生这种情况时,您将要在与您创建的范围相同的范围内调用Dispose()(通常,如Ashish所述,使用“using”关键字)。

答案 1 :(得分:1)

ViewModelA - 实现IDisposable

ViewModelB - 具有ViewModelA列表

我认为您不需要在ViewModelB上实现IDisposable,因为无论您在ViewModelB中使用该列表,您实际上都将对ViewModelA对象进行操作,这些对象已经实现了IDisposable以配置服务控制器(例如 - 可用于一个“使用”块)。