StandarDesign/StandardDesign.ViewModels/ViewModelLocator.cs
2024-01-30 08:48:46 +08:00

50 lines
1.6 KiB
C#

using CommonServiceLocator;
using GalaSoft.MvvmLight;
using GalaSoft.MvvmLight.Ioc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace StandardDesign.ViewModels
{
public class ViewModelLocator
{
public ViewModelLocator()
{
//管理对象的生命周期
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
//注册ioc容器
SimpleIoc.Default.Register<LoginViewModel>();
SimpleIoc.Default.Register<MainViewModel>();
// SimpleIoc.Default.Register<ILoacalDataAccess, LoacalDataAccess>();
}
// 这种属性定义方式会有歧义,感觉好像定义的字段
public LoginViewModel LoginViewModel => ServiceLocator.Current.GetInstance<LoginViewModel>();
public MainViewModel MainViewModel => ServiceLocator.Current.GetInstance<MainViewModel>();
/// <summary>
/// 通过ViewModelLocator对象实例 进行对应的VM对象的销毁
/// </summary>
/// <typeparam name="T"></typeparam>
public static void Cleanup<T>() where T : ViewModelBase
{
if (SimpleIoc.Default.IsRegistered<T>() && SimpleIoc.Default.ContainsCreated<T>())
{
var instances = SimpleIoc.Default.GetAllCreatedInstances<T>();
foreach (var instance in instances)
{
instance.Cleanup();
}
SimpleIoc.Default.Unregister<T>();
SimpleIoc.Default.Register<T>();
}
}
}
}