My ViewModel создает экземпляр ресурса, который должен быть освобожден при выходе из программы.
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();
}
}
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?
Большое спасибо.