2021-03-30

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解耦,又可以实现业务需求









原文转载:http://www.shaoqun.com/a/654729.html

跨境电商:https://www.ikjzd.com/

走秀网:https://www.ikjzd.com/w/2427

蜜芽宝贝官网:https://www.ikjzd.com/w/1320


在某些业务场景中,可能并不需要单例,而是每次都创建新的实例,下面是SimpleIOC使用一次性实例的用法///<summary>///打开某某窗口///</summary>privatevoidOpenWindow(){varguid=System.Guid.NewGuid().ToString();//使用Guid作为实例Keyvarvm=SimpleIoc.Defaul
noon:https://www.ikjzd.com/w/259
马士基集团:https://www.ikjzd.com/w/1296
damai:https://www.ikjzd.com/w/1391
口述:为工作 我上了男上司的床(2/2):http://lady.shaoqun.com/m/a/54555.html
锦桥纺织网:https://www.ikjzd.com/w/2469
我和两个男人相识于游戏 口述疯狂的夜晚我喝得烂醉如泥:http://www.30bags.com/a/250151.html

No comments:

Post a Comment