MVVM light 中的 ViewModelLocator 是否为每个 ViewModel 在内存中保存实例?
Does the ViewModelLocator in MVVM light hold instances in memory for every ViewModel?
我在开发一个相当大的软件,有 100 多个对话框。我们正在考虑 MVVM light,但我刚刚读了一篇旧文章,其中指出 "All ViewModels are kept im memory till the cleaup is called"。
所以我的问题:
- 这是否意味着在加载时它将加载程序中的 所有 个 ViewModel?
- 如果是默认加载全部,我可以改成load/instantiate只在对话框打开时加载ViewModels吗?
文章是Abkürzung zum ViewModel。抱歉,这是 2008 年的德语版,您需要注册才能阅读。但我的问题只是关于那句话,所以你可以忽略它。
我已阅读 this question,内容非常丰富,但我并没有真正找到问题的答案。
这是由 nugetting mvvmlight
包创建的默认 ViewModelLocator
class。
public class ViewModelLocator
{
public ViewModelLocator()
{
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
////if (ViewModelBase.IsInDesignModeStatic)
////{
//// // Create design time view services and models
//// SimpleIoc.Default.Register<IDataService, DesignDataService>();
////}
////else
////{
//// // Create run time view services and models
//// SimpleIoc.Default.Register<IDataService, DataService>();
////}
SimpleIoc.Default.Register<MainViewModel>();
}
public MainViewModel Main
{
get
{
return ServiceLocator.Current.GetInstance<MainViewModel>();
}
}
public static void Cleanup()
{
// TODO Clear the ViewModels
}
}
除非你把它放在那里,否则在 class 里面创建任何视图模型都没有魔法。默认情况下涉及 ServiceLocator
,您可以删除它并用您选择的任何 DI 容器替换,或者手动实例化由此 ViewModelLocator
处理的 ViewModels。
static Cleanup()
默认情况下 未被调用 ,您必须随时随地调用,以便随时调用。如果需要的话,这完全取决于你。
结论:ViewModelLocator
如何运作和表现完全取决于你
回答您的问题:
- Does that mean that on load it will load all ViewModels in the program?
不,除非您编写可以这样做的代码
- If it is the default to load all, can I change it to load/instantiate the ViewModels only when the dialog is opened?
(见上文)
我在开发一个相当大的软件,有 100 多个对话框。我们正在考虑 MVVM light,但我刚刚读了一篇旧文章,其中指出 "All ViewModels are kept im memory till the cleaup is called"。 所以我的问题:
- 这是否意味着在加载时它将加载程序中的 所有 个 ViewModel?
- 如果是默认加载全部,我可以改成load/instantiate只在对话框打开时加载ViewModels吗?
文章是Abkürzung zum ViewModel。抱歉,这是 2008 年的德语版,您需要注册才能阅读。但我的问题只是关于那句话,所以你可以忽略它。
我已阅读 this question,内容非常丰富,但我并没有真正找到问题的答案。
这是由 nugetting mvvmlight
包创建的默认 ViewModelLocator
class。
public class ViewModelLocator
{
public ViewModelLocator()
{
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
////if (ViewModelBase.IsInDesignModeStatic)
////{
//// // Create design time view services and models
//// SimpleIoc.Default.Register<IDataService, DesignDataService>();
////}
////else
////{
//// // Create run time view services and models
//// SimpleIoc.Default.Register<IDataService, DataService>();
////}
SimpleIoc.Default.Register<MainViewModel>();
}
public MainViewModel Main
{
get
{
return ServiceLocator.Current.GetInstance<MainViewModel>();
}
}
public static void Cleanup()
{
// TODO Clear the ViewModels
}
}
除非你把它放在那里,否则在 class 里面创建任何视图模型都没有魔法。默认情况下涉及 ServiceLocator
,您可以删除它并用您选择的任何 DI 容器替换,或者手动实例化由此 ViewModelLocator
处理的 ViewModels。
static Cleanup()
默认情况下 未被调用 ,您必须随时随地调用,以便随时调用。如果需要的话,这完全取决于你。
结论:ViewModelLocator
如何运作和表现完全取决于你
回答您的问题:
- Does that mean that on load it will load all ViewModels in the program?
不,除非您编写可以这样做的代码
- If it is the default to load all, can I change it to load/instantiate the ViewModels only when the dialog is opened?
(见上文)