在某些業務場景中,可能並不須要單例,而是每次都建立新的實例,下面是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