最佳实践CleanUp ViewModelLocator

时间:2014-07-22 04:37:08

标签: c# wpf mvvm mvvm-light

我的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();
    }
}

2 个答案:

答案 0 :(得分:0)

您可以在Closing类的Closed类上使用MainWindowApplication事件 - 可能最好使用Closed事件,因为窗口将会不再可见。

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

或者您可以在Exit课程中使用Application事件。

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

答案 1 :(得分:0)

如果要退出该应用程序,那么为什么要清理所有资源?当进程被拆除时,操作系统将执行此操作。当您不再需要资源时,您想在Dispose()上调用IDisposable,以便清理所有非托管资源。如果该过程被淘汰了,则无需调用它,因为在该过程结束后,不会在内存空间中进行垃圾回收。

我同意,在您的Window超出了用户的“范围”之后,不再需要处理资源,但是过程的最后不必这样做。

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