我使用以下命令创建了一个 C# WPF 应用程序MVVM轻框架 http://www.galasoft.ch/mvvm/。我的应用程序使用ViewModelLocator
类在运行时定位视图模型。这ViewModelLocator
利用SimpleIoc
类还附带MVVM轻框架 http://www.galasoft.ch/mvvm/.
这是我的场景:
用户登录可以使用我的应用程序。注销时,我想处置/重置/重新创建所有视图模型实例,以便为下一个用户提供一个干净的环境。
我尝试实施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 容器。
With SimpleIoC
我会添加一个带有私有字符串后端的公共静态属性,以实现唯一的Key
就像是
private static string _currentKey = System.Guid.NewGuid().ToString();
public static string CurrentKey {
get {
return _currentKey;
}
private set {
_currentKey = value;
}
}
并使用清理方法使用当前密钥注销虚拟机并最终重置当前密钥(在每个应用程序重置阶段调用):
public static void Cleanup() {
SimpleIoc.Default.Unregister<LoginViewModel>(CurrentKey);
...
CurrentKey = System.Guid.NewGuid().ToString();
}
并且当打电话时GetInstance(...)
只需传入静态CurrentKey
.
SimpleIoc.Default.GetInstance<LoginViewModel>(ViewModelLocator.CurrentKey);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)