我的一个视图模型包含对服务控制器的引用。我已经在这个视图模型上实现了 IDisposable。现在,我正在其他一些视图模型中创建此视图模型的列表。我是否需要在其他视图模型上实现 IDisposable。
2 回答
我会支持这一步,并询问您的视图模型如何获得对 ServiceController 的此引用。您是否将其作为依赖项注入?ServiceController 的寿命是否比 ViewModel 更长?如果 ViewModel 正在创建它,那么 Disposable 是有意义的,但是如果您正在注入此依赖项,或者它以某种方式在“ViewModelA”的实例之间共享,那么它不应该由该类来处理 ServiceController . 我的意思是,对可能在其他地方合法范围内的某个对象调用 Dispose() 是没有意义的。
但是,假设这确实有意义(您有一些在内部创建其 ServiceController 的 VM 列表),那么 ViewModelB 是否需要实现 IDisposable 取决于 ViewModelA 实例的生命周期。如果这些作为类级别变量保留,那么是的,您可能应该在 VMB 的 IDisposable 中处理它们。如果它们是在一个方法中创建、使用和丢弃的,那么就没有必要了。
关于 IDisposable 的推理实际上就是考虑对象的生命周期。当您有一些需要释放但在实例生命周期内保留的资源时,这是有意义的。而且,当这种情况发生时,您需要在与创建它的范围相同的范围内调用 Dispose()(通常,如 Ashish 所述,使用“using”关键字)。
ViewModelA - 实现 IDisposable
ViewModelB - 有 ViewModelA 的列表
我认为您不需要在 ViewModelB 上实现 IDisposable,因为无论您在 ViewModelB 中使用该列表的任何位置,您都将基本上对已经实现 IDisposable 以处置服务控制器的 ViewModelA 对象进行操作(例如,可以在“使用“堵塞)。