我正在改进我的软件,其中有混乱的 Messenger.Default(...)
代码块。
是否有简明易懂的MVVMLight SimpleIoc使用指南(不是通用IoC介绍)?
我正在改进我的软件,其中有混乱的 Messenger.Default(...)
代码块。
是否有简明易懂的MVVMLight SimpleIoc使用指南(不是通用IoC介绍)?
SimpleIoc备忘单:
您需要在ViewModelLocator中注册所有接口和对象
class ViewModelLocator
{
static ViewModelLocator()
{
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
if (ViewModelBase.IsInDesignModeStatic)
{
SimpleIoc.Default.Register<IDataService, Design.DesignDataService>();
}
else
{
SimpleIoc.Default.Register<IDataService, DataService>();
}
SimpleIoc.Default.Register<MainViewModel>();
SimpleIoc.Default.Register<SecondViewModel>();
}
public MainViewModel Main
{
get
{
return ServiceLocator.Current.GetInstance<MainViewModel>();
}
}
}
默认情况下,每个对象都是单例的。如果要解决一个对象不是单例的问题,您需要向GetInstance调用传递一个唯一的值:
SimpleIoc.Default.GetInstance<MainViewModel>(Guid.NewGuid().ToString());
注册一个类到一个接口:
SimpleIoc.Default.Register<IDataService, Design.DesignDataService>();
注册一个具体对象到接口:
SimpleIoc.Default.Register<IDataService>(myObject);
注册具体类型的方法如下:SimpleIoc.Default.Register<MainViewModel>();
从接口中解析一个对象:
SimpleIoc.Default.GetInstance<IDataService>();
直接解析一个对象(包括构建和依赖关系解析):
SimpleIoc.Default.GetInstance<MainViewModel>();
MVVM 让设计时间数据变得非常容易:
if (ViewModelBase.IsInDesignModeStatic)
{
SimpleIoc.Default.Register<IDataService, Design.DesignDataService>();
}
else
{
SimpleIoc.Default.Register<IDataService, DataService>();
}
如果您处于设计时模式,它将自动注册您的设计时服务,这样在使用VS设计器时,在视图模型和视图中拥有数据就变得非常容易。