在某些业务场景中,可能并不须要单例,而是每次都建立新的实例,下面是SimpleIOC使用一次性实例的用法ide
/// <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重载方法,不会卸载实例只会销毁实例
还有一种更加便捷的方法ui
public override void Cleanup() { base.Cleanup(); SimpleIoc.Default.Unregister<ExampleViewModel>(); SimpleIoc.Default.Register<ExampleViewModel>(); }
重写实例的Cleanup方法,卸载并销毁当前实例再次注册,当下一次获取实例时才会建立新的实例(前提是要执行过Cleanup())
这样咱们既能够经过IOC解耦,又能够实现业务需求code