在某些業務場景中,可能并不需要單例,而是每次都創建新的實體,下面是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解耦,又可以實作業務需求
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/270448.html
標籤:.NET技术
上一篇:談談對IOC及DI的理解與思考
