My 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();
}
}
しかし、は、指定されたViewModelのすべてのインスタンスを返すことに気付きましたが、この例のようServiceLocator.Current.GetAllInstances<MainViewModel>()
に尋ねると、空のコレクションが返されます!!ServiceLocator.Current.GetAllInstances<ViewModelBase>()
したがって、1つのforeachのみを使用してすべてのViewModelに対してCleanUp()を呼び出すことは可能ですか?
どうもありがとう。