Aurelia的全球应用状况

时间:2015-07-03 15:56:13

标签: javascript dependency-injection aurelia

我正在尝试将一个类注入我的Aurelia应用程序中的其他位置,以便在登录后共享身份验证状态。我正在关注此示例http://hobbit-on-aurelia.net/appstate/但看起来范围在转换期间丢失或它们是独立实例。 Aurelia的文档说:

  

默认情况下,DI容器假定所有内容都是单例   实例;

当我从app实例设置路由器this.userSession.router = router时,userSession实例不会更新。 this.loggedUser永远不会从外部定义。

这是我的傻瓜:http://plnkr.co/edit/qXtSGx

1 个答案:

答案 0 :(得分:5)

如果您假设用户会话是单例,则问题就在于此。在您的示例中,用户会话是视图模板,它不是单例。无论何时导航到视图,都会创建这些(在当前实现中,这可能会随着缓存而改变)。从视图导航时,它们也会被破坏。

您想要的是一个独立的类,您可以将其注入到视图模型的构造函数中。

export class MyViewModel {
   static inject = [UserSession];
   constructor(userSession) {
       this.userSession = userSession;
   }
}

这将创建服务类UserSession的单例实例,即默认行为。然后,容器将在创建视图时将其注入视图模型。