WPF MVVMLight SimpleIOC生命周期管理
MVVMLight默认IOC容器是SimpleIOC,但该容器并没有实例的生命周期管理,也就是说默认是单例模式
在某些业务场景中,可能并不需要单例,而是每次都创建新的实例,下面是SimpleIOC使用一次性实例的用法
/// <summary>
/// 打开某某窗口
/// </summary>
private void OpenWindow()
{
var guid = System.Guid.NewGuid().ToString();//使用Guid作为实例Key
var vm = SimpleIoc.Default.GetInstance<ExampleViewModel>(guid);//获取实例对象
vm.SetTitile();//执行实例中的方法
var addWinow = new AddWindow() { DataContext = vm };//设置VM对象
addWinow.Closed += (s, e) => SimpleIoc.Default.Unregister(guid);//订阅Closed事件,注销实例
addWinow.ShowDialog();
}
需要注意的是SimpleIOC中所有Unregister重载方法都会销毁实例,但拥有Key参数的Unregister重载方法,不会卸载实例只会销毁实例
还有一种更加便捷的方法
public override void Cleanup()
{
base.Cleanup();
SimpleIoc.Default.Unregister<ExampleViewModel>();
SimpleIoc.Default.Register<ExampleViewModel>();
}
重写实例的Cleanup方法,卸载并销毁当前实例再次注册,当下一次获取实例时才会创建新的实例(前提是要执行过Cleanup())
这样我们既可以通过IOC解耦,又可以实现业务需求
标签:
WPF
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】博客园2025新款「AI繁忙」系列T恤上架,前往周边小店选购
【推荐】凌霞软件回馈社区,携手博客园推出1Panel与Halo联合会员
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用perf跟踪.NET程序的mmap泄露
· 日常问题排查-空闲一段时间再请求就超时
· Java虚拟机代码是如何一步一步变复杂且难以理解的?
· 领域驱动的事实与谬误 一 DDD 与 MVC
· SQL Server 2025 中的改进
· C# 14 新增功能一览,你觉得实用吗?
· C#/.NET/.NET Core优秀项目和框架2025年4月简报
· Linux系列:如何用perf跟踪.NET程序的mmap泄露
· .NET + AI | Semantic Kernel vs Microsoft.Extension
· windows11 安装WSL2详细过程