Как принудительно выполнить очистку ()для всех моих ViewModels

My ViewModel создает экземпляр ресурса, который должен быть освобожден при выходе из программы.

это во всех моих ViewModels:

public class MainViewModel : ViewModelBase
{
    LocalServer Server { get; set; }
    Resource MyResorce { get; set; }

    public MainViewModel(LocalServer server)
    {
        this.Server = server;
        MyResource = new Resource();
    }

    public override void Cleanup()
    {
        if (MyResource != null)
            MyResource.Close();

        MyResource = null;
        base.Cleanup();
    }
}

это в ViewModelLocator

public class ViewModelLocator
{
    public ViewModelLocator()
    {
        ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
        SimpleIoc.Default.Register<MainViewModel>();
    }

    public MainViewModel MainVM
    {
        get
        {
            return ServiceLocator.Current.GetInstance<MainViewModel>();
        }
    }

    public static void Cleanup()
    {
        // Wrong!! The collection is empty!
        foreach (ViewModelBase vm in ServiceLocator.Current.GetAllInstances<ViewModelBase>() )
            vm.Cleanup();

        SimpleIoc.Default.Unregister<MainViewModel>();

        Messenger.Reset();
    }
}

Но я заметил, что ServiceLocator.Current.GetAllInstances<MainViewModel>()возвращает все экземпляры данной ViewModel, но если я задам ServiceLocator.Current.GetAllInstances<ViewModelBase>(), как в этом примере, он вернет пустую коллекцию!!

Итак, возможно ли вызвать CleanUp ()для всех моих ViewModel, используя только один foreach?

Большое спасибо.

6
задан user1528311 20 July 2012 в 11:23
поделиться