Csharp/C#教程:如何重置IOC容器中的所有实例分享


如何重置IOC容器中的所有实例

我使用MVVM Light框架制作了一个C#WPF应用程序。 我的应用程序使用ViewModelLocator类在运行时定位视图模型。 ViewModelLocator使用了与MVVM Light框架一起提供的SimpleIoc类。

这是我的场景:用户登录可以使用我的应用程序。 在注销时,我想处置/重置/重新创建所有viewmodel实例,以便为下一个用户提供干净的环境。

我试图在ViewModelLocator类中实现Cleanup()方法,但它无法正常工作。 不工作意味着(第二个)用户看到之前登录的用户的数据。

第一次尝试:

 public static void Cleanup() { SimpleIoc.Default.Reset(); } 

第二次尝试:

 public static void Cleanup() { SimpleIoc.Default.Unregister(); SimpleIoc.Default.Unregister(); SimpleIoc.Default.Register(); SimpleIoc.Default.Register(); } 

第三次尝试(不是我想要的,但它是一种解决方法):

 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().Cleanup(); SimpleIoc.Default.GetInstance().Cleanup(); } 

如何重置ViewModelLocator类中的所有实例? 如果有必要,我愿意使用更高级的Ioc容器。

使用SimpleIoC

我将为一个唯一的Key添加一个带有私有字符串后端的公共静态属性

就像是

 private static string _currentKey = System.Guid.NewGuid().ToString(); public static string CurrentKey { get { return _currentKey; } private set { _currentKey = value; } } 

并使用清理方法使用当前密钥注销VM,最后重置当前密钥(在每个应用程序重置阶段调用):

 public static void Cleanup() { SimpleIoc.Default.Unregister(CurrentKey); ... CurrentKey = System.Guid.NewGuid().ToString(); } 

当调用GetInstance(...)只需传入静态CurrentKey

上述就是C#学习教程:如何重置IOC容器中的所有实例分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

 SimpleIoc.Default.GetInstance(ViewModelLocator.CurrentKey); 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1042786.html

(0)
上一篇 2022年1月30日
下一篇 2022年1月30日

精彩推荐