.net MVVM视图模型单例

.net MVVM视图模型单例,.net,wpf,design-patterns,mvvm,.net,Wpf,Design Patterns,Mvvm,如果不需要每个屏幕的多个实例,那么将所有viewModels设置为单例是错误的做法吗?是,因为 您可能会遇到这样的问题:虚拟机保持与数据库不同步的状态,从而导致内存消耗过多。 由于状态被持久化,单元测试将更加困难。是。 首先,根据单例实现的不同,您可能正处于任何可扩展性的困境中。第二,考虑到到处都是静态单例,设计可能不会很干净。第三,单元测试要么很困难,要么无法复制实际的类使用情况,要么两者兼而有之。第四,让单身汉为你解决任何设计问题吗?如果您只是想节省资源,那么我就忘了它。单例: 使测试更加

如果不需要每个屏幕的多个实例,那么将所有viewModels设置为单例是错误的做法吗?

是,因为

您可能会遇到这样的问题:虚拟机保持与数据库不同步的状态,从而导致内存消耗过多。 由于状态被持久化,单元测试将更加困难。

是。

首先,根据单例实现的不同,您可能正处于任何可扩展性的困境中。第二,考虑到到处都是静态单例,设计可能不会很干净。第三,单元测试要么很困难,要么无法复制实际的类使用情况,要么两者兼而有之。第四,让单身汉为你解决任何设计问题吗?如果您只是想节省资源,那么我就忘了它。

单例:

  • 使测试更加困难
  • 如果您确实需要不止一个问题,请稍后为您提供问题
  • 很难控制它们是在哪里产生的

因此,只有当您有非常好的理由时才使用单例模式——“因为您可以”不是一个很好的理由。

我的首选是编写一个ViewModel单例,它提供主ViewModel对象,视图可以根据需要从中轻松检索所有其他ViewModel对象。通常,此主视图模型对象提供命令实现,以便视图支持打开文档,有什么评论吗?那篇文章的文档管理器适配器部分?我会看一些关于Prism或Caliburn的文章,并使用控制反转框架(如Unity)为您解析和实例化视图模型@Tom,难道不是所有的控制反转框架中都至少有一个单例吗?你刚才说所有单例都是eval:)更多的情况是,很少有这样的场景,你应该总是尝试寻找替代方法。就DI而言,它是关于如何管理对容器的访问。您应该在应用程序的最高入口点创建和设置容器,并使用它将依赖项注入到它下面的对象中,这样就不会直接使用DI容器。