我正在尝试使用MvvmCross视图模型,在我的应用程序中,它们不仅在具有相似布局结构的不同平台之间共享,而且在应用程序之间共享,其中信息的呈现方式取决于应用程序的外形。例如,iPad应用程序可能会在同一页面上显示客户列表和所选客户详细信息,而iPhone应用程序会在不同页面之间拆分它们。 MvvmCross支持所有这些场景,因此在所有这些应用程序之间共享通用视图模型非常简单。
但是,有时候可以方便地在多个视图模型之间共享相同的详细信息。例如,不同的视图可能会显示最近的Twitter消息,股票报价更新等。或者某些全局用户设置(用户名,最近的登录时间等)。目前我已将它们放在从MvxNotifyPropertyChanged继承的单例类AppState中。所有视图模型都具有属性AppState来访问共享应用程序状态,因此任何视图都可以将其控件绑定到AppState ..这也适用于设计时模型。
我已经在几个平台上测试过(还没有尝试过非Windows平台),它按预期工作。但我没有测试终身情景,例如墓碑/脱水。基本上我的视图中有一些部分绑定到单例的属性。是否有与视图模型生命周期相关的警告?
此外,如果可以使用这些单例,我可以使用singleton pattern或MvvmCross依赖注入(MvxResolve)。从技术上讲它会是一样的,所以这两种方法都有什么优势吗?
答案 0 :(得分:1)
如果静态共享适用于您和您的应用,那就太棒了。
我没有具体的理由可以想到为什么这会使你的对象在不同的生命周期情况下更难使用。
static
被'不赞成'的主要原因是架构原因 - static
导致紧密耦合的代码,这些代码不太可测试,而且(IMHO)难以维护和重用长期。
如果您的应用不关心这些事情 - 可能就是这种情况 - 那么静态单例可能是构建应用的好方法 - 甚至可能使其他人更容易理解代码。
关于此类区域还有很多其他问题,例如: