我构建了一个用户必须登录才能继续的应用程序。
已连接的用户,已分配到当前ViewModel中的CurrentAccountProperty。
现在,如何让所有其他与之交互的ViewModel及其数据都能访问此当前连接的帐户?
例如,操纵其登录详细信息的ViewModels,例如ViewModels,它将其内容添加到其RecentActivities属性等等。
我应该持有对当前帐户的引用吗?在每个使用此对象的ViewModel中都有类似CurrentAccount的东西吗?
感谢。
答案 0 :(得分:1)
如果您正在使用(依赖注入/ IOC容器),我通常使用依赖注入的方式 - 创建一个contextviewmodel使其成为单例,然后将其注入需要使用它的每个viewmodel的构造函数中。因此,它会在应用程序加载时创建,在您需要填充时填充,然后在整个应用程序中作为上下文保留。
所以,如果你正在使用DI和IOC。 如果您使用Unity之类的东西 - 使用ControlledContainerLifetime()选项使其成为单身。
你必须将contextviewmodel添加到容器中,并且(如果你正在使用unity等 - 解决它),所以第一次需要它时 - 注入它并更新你需要的登录属性。之后 - 如果您需要在另一个视图模型中使用它 - 只需使用[Dependency]属性再次注入它或者将其注入构造函数中。然后因为contextviewmodel是一个单例,它将包含具有先前设置的属性的contextviewmodel的相同实例。如果您需要代码示例,请告诉我。
只要将此视图模型注入您使用的任何其他类中,您就可以使用它,并且它会在您的应用程序的生命周期内持续存在。
答案 1 :(得分:1)
我通常在用户登录后设置Export
(MEF)属性。
/// <summary>
/// Gets or sets LoggedUser.
/// </summary>
[Export]
public UserInfo LoggedUser { get; set; }
然后我Import
到处都需要访问已登录的用户。
/// <summary>
/// Gets or sets LoggedUser.
/// </summary>
[Import]
public UserInfo LoggedUser { get; set; }
当然,您也可以使用任何IoC容器。当你谈论MVVM时,你应该使用某种IoC。