<分区>
我正在改造我的软件,它有凌乱的 Messenger.Default(...)
位。
是否有任何备忘单可以了解 MVVMLight SimpleIoc 的用法(不是一般的 IoC 描述)?
<分区>
我正在改造我的软件,它有凌乱的 Messenger.Default(...)
位。
是否有任何备忘单可以了解 MVVMLight SimpleIoc 的用法(不是一般的 IoC 描述)?
最佳答案
SimpleIoc 床单:
1) 在 ViewModelLocator 中注册所有接口(interface)和对象
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>();
}
}
}
2) 默认情况下,每个对象都是单例。要解析对象使其不是单例,您需要将唯一值传递给 GetInstance 调用:
SimpleIoc.Default.GetInstance<MainViewModel>(Guid.NewGuid().ToString());
3) 针对接口(interface)注册一个类:
SimpleIoc.Default.Register<IDataService, Design.DesignDataService>();
4) 针对接口(interface)注册具体对象:
SimpleIoc.Default.Register<IDataService>(myObject);
5) 注册具体类型:
SimpleIoc.Default.Register<MainViewModel>();
6) 从接口(interface)解析对象:
SimpleIoc.Default.GetInstance<IDataService>();
7) 直接解析对象(构建和依赖解析):
SimpleIoc.Default.GetInstance<MainViewModel>();
8) MVVM 使处理设计时数据变得非常容易:
if (ViewModelBase.IsInDesignModeStatic)
{
SimpleIoc.Default.Register<IDataService, Design.DesignDataService>();
}
else
{
SimpleIoc.Default.Register<IDataService, DataService>();
}
如果您处于设计时模式,它会自动注册您的设计时服务,这使得在 VS 设计器中工作时在您的 View 模型和 View 中拥有数据变得非常容易。
希望这对您有所帮助。
关于c# - 如何使用 MVVMLight SimpleIoc?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13795596/