zoukankan      html  css  js  c++  java
  • WPF MVVMLight 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解耦,又可以实现业务需求

  • 相关阅读:
    如何打日志才能方便排查问题?
    为什么 HashMap 并发时会引起死循环?
    Spring 为什么会有 FactoryBean?
    常用 Git 使用技巧,收藏了~
    Gin中context的使用
    Gin的路由算法
    k8s中的网络通信总结
    k8s架构
    Golang中的值拷贝与引用拷贝
    golang知识要点总结
  • 原文地址:https://www.cnblogs.com/Stay627/p/14595910.html
Copyright © 2011-2022 走看看