50 lines
1.6 KiB
C#
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>();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|