我的 ViewModel 实例化程序退出时必须释放的资源。
这在我所有的 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();
}
}
这在 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>()
在这个例子中这样问,它返回一个空集合!
那么,是否可以只使用一个 foreach 为我的所有 ViewModel 调用 CleanUp()?
非常感谢。