我的视图模型实例资源的程序退出时必须被释放。
这在我所有的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>()
返回给定视图模型的所有实例,但如果我问ServiceLocator.Current.GetAllInstances<ViewModelBase>()
就像这个例子,它返回一个空的集合!
因此,它是只用一个可能的foreach调用清理()我所有的ViewModel?
非常感谢。