Loading

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

posted @ 2021-03-30 11:08  Stay627  阅读(746)  评论(0编辑  收藏  举报