WPF MVVMLight SimpleIOC生命周期管理


MVVMLight默認IOC容器是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解耦,又可以實現業務需求


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM