我使用MVVM Light 框架制作了一个 C# WPF 应用程序。我的应用程序使用ViewModelLocator
该类在运行时定位视图模型。使用MVVM Light 框架附带ViewModelLocator
的类。SimpleIoc
这是我的场景:用户登录可以使用我的应用程序。注销时,我想处置/重置/重新创建所有视图模型实例,为下一个用户提供一个干净的环境。
我试图Cleanup()
在类中实现该方法,ViewModelLocator
但它不起作用。不工作意味着(第二个)用户看到之前登录的用户的数据。
第一次尝试:
public static void Cleanup()
{
SimpleIoc.Default.Reset();
}
第二次尝试:
public static void Cleanup()
{
SimpleIoc.Default.Unregister<LoginViewModel>();
SimpleIoc.Default.Unregister<TaskViewModel>();
SimpleIoc.Default.Register<LoginViewModel>();
SimpleIoc.Default.Register<TaskViewModel>();
}
第三次尝试(不是我想要的,但它是一种解决方法):
public static void Cleanup()
{
// I implemented the ICleanup interface in my viewmodels
// The cleanup method clears all my variables eg: myCollection.clear();
SimpleIoc.Default.GetInstance<LoginViewModel>().Cleanup();
SimpleIoc.Default.GetInstance<TaskViewModel>().Cleanup();
}
如何重置ViewModelLocator
班级中的所有实例?如有必要,我愿意使用更高级的 Ioc Container。