如果存在一个小概率情况下不需要在内存中保留ViewModel的实例,那么每次需要时都可以创建一个新的实例。如果我们拥有ViewModel的工厂,我们将拥有以下属性:
public MyViewMOdel MyViewModel
{
get { return SimpleIoc.Default.GetInstance<MyViewModel>(); }
}
这个代码使用了单例模式,但我认为在某些情况下这并不是最佳实践。为了解决这个问题,我做了以下操作:
public MyViewModel MyViewModel
{
get { return new MyViewModel(SimpleIoc.Default.GetInstance<ISomeInterface>()); }
}
这种方法的劣势在于,如果我修改了 MyViewModel 的构造函数,那么我还需要更新这个属性。虽然不是什么大问题,但还是存在某种依赖关系。
你是如何处理这种情况的?我是否漏掉了什么?为什么决定不返回非共享实例?
另外一个问题是,在 MVVM 深入探讨中,Laurent 在注册特定的 ViewModel 后使用 GetInstance 方法,以确保容器中已经有此 ViewModel 的实例。为什么会有这种必要性呢?如果通过 ViewModelLocator 获取 ViewModel,则会在需要时创建它。那么我为什么想要预先创建它们呢?