【问题标题】:Best Practice CleanUp ViewModelLocator最佳实践清理 ViewModelLocator
【发布时间】:2014-07-22 04:37:08
【问题描述】:

我的 MVVM Light 应用程序中的 ViewModel 有一些资源,必须在应用程序关闭时处理。我在 ViewModelLocator 中有 CleanUp 方法来做到这一点。在我的应用程序中调用 CleanUp 方法的正确位置在哪里。

public class ViewModelLocator
{
    /// <summary>
    /// Initializes a new instance of the ViewModelLocator class.
    /// </summary>
    public ViewModelLocator()
    {
        ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);

        SimpleIoc.Default.Register<MainViewModel>();
    }
    public MainViewModel Main
    {
        get
        {
            return SimpleIoc.Default.GetInstance<MainViewModel>();
        }
    }
    public static void Cleanup()
    {
        var main=SimpleIoc.Default.GetInstance<MainViewModel>();
        main.Dispose();
    }
}
public class MainViewModel:ViewModelBase, IDisposable
{

    public void Dispose()
    {
       disposableResoure.Dispose();
    }
}

【问题讨论】:

    标签: c# wpf mvvm mvvm-light


    【解决方案1】:

    您可以在 Application 类的 MainWindow 类上使用 ClosingClosed 事件 - 最好使用 Closed 事件,因为窗口将不再可见。

    http://msdn.microsoft.com/en-us/library/system.windows.application.mainwindow(v=vs.110).aspx

    或者您可以在Application 类上使用Exit 事件。

    http://msdn.microsoft.com/en-us/library/system.windows.application.exit(v=vs.110).aspx

    【讨论】:

      【解决方案2】:

      如果您要退出应用程序,那为什么还要清理资源呢?当进程被拆除时,操作系统会这样做。当您不再需要该资源时,您想在 IDisposable 上调用 Dispose(),以便清理所有非托管资源。如果进程被丢弃,则无需调用它,因为在进程消失后不会在内存空间中进行垃圾收集。

      我同意在您的 Window 超出用户的“范围”并且不再需要之后处置资源,但不需要结束该过程。

      Here 是使用Cleanup() 方法的另一种方式:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-01-23
        • 2010-12-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-14
        • 2013-02-05
        相关资源
        最近更新 更多