gpt4 book ai didi

MVVM在所有 View 之间共享对象

转载 作者:行者123 更新时间:2023-12-02 08:56:23 26 4
gpt4 key购买 nike

我有 MVVM 项目,我想在多个 View 模型之间共享模型中的一个对象(单例),这样做的好做法是什么?谢谢您的帮助

最佳答案

如果需要该对象并且不提供值,则不通过 Constructor Injection 强制对象内的接口(interface);不要通过注入(inject)推送具体类型,始终使用接口(interface)。

因为您没有使用 IoC 容器,例如 Unity ,您需要在应用程序启动时创建单例实例,然后确保根据需要通过给定的 ViewModels 构造函数传入给定的实例。

更好的方法是将单例实例推送到可以提供所需行为的服务,然后忽略将单例推送到模型中。这将是一种更纯粹的 MVVM 方法,并将在模型/ View 模型之间分离关注点。

编辑:

如果您使用 Unity,您将定义 Lifetime Manager注册时。

// Register a type to have a singleton lifetime without mapping the type
// Uses the container only to implement singleton behavior
myContainer.RegisterType<MySingletonObject>(new ContainerControlledLifetimeManager());
// Following code will return a singleton instance of MySingletonObject
// Container will take over lifetime management of the object
myContainer.Resolve<MySingletonObject>();

一旦您执行此操作,任何通过 IUnityContainer 解析 MySingletonObject 的尝试都将解析为同一实例,从而提供您在应用程序中所需的单例行为。 ViewModel 本身不需要返回相同的实例。它需要的数据应该通过前面提到的服务抽象出来,该服务可能表现得像单例,并在需要时提供有状态的实现,但 ViewModel 不需要是单例。如果您发现自己将 Model 或 ViewModel 设为单例;退后一步并分析您的设计。

关于MVVM在所有 View 之间共享对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4535572/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com