使用Singleton作为模型或将模型注入viewmodel的位置?

时间:2014-11-17 02:34:12

标签: c# wpf mvvm

通常,我只使用单例模式作为模型类Logbook。但是,我试图转向学习DI,并希望将模型注入我的viewmodel。此外,我计划为各种功能打开不同的子窗口(选择要显示的日志条目,排序顺序,添加日志条目等),这些窗口可能需要也可能不需要访问模型。在这些约束条件下使用单例模式与DI的优缺点是什么?另外,如果我的很多视图模型需要访问这个模型,那么DI是可能的吗?最后,我应该在哪里/如何实例化视图,视图模型和模型才能注入?

1 个答案:

答案 0 :(得分:2)

当您使用依赖注入时,我们的想法是提供类,并且具有所需依赖项的特定实现,因此当您进行单元测试时,您可以提供模拟或存根实现。这被称为松耦合。

与此同时,单身人士是你无法控制的全球性国家。如果你的班级访问一个单身人士,它会紧紧地联系到单身人士。你怎么嘲笑单身人士?一般来说,你不是。你坚持下去了,突然你有了不稳定的代码。出于这个原因,单身人士通常被认为是一种反模式。 (旁白:那里有 方法,但基本的设计问题仍然存在)

更糟糕的是,如果你班级中的某些东西改变了单身人士的状态,那么在你正在编写的其他考试中会产生副作用,并且很难弄清楚测试B在单独运行时通过的原因,但是失败了如果它在测试A之后运行。

我的经验法则是不要使用单身,

你的具体问题听起来有点可疑。您的viewmodel不需要注入模型。听起来你想要一个负责检索或构建模型的类,然后你将该类的实现注入到你的viewmodel中。