我正在尝试将一个类注入我的Aurelia应用程序中的其他位置,以便在登录后共享身份验证状态。我正在关注此示例http://hobbit-on-aurelia.net/appstate/但看起来范围在转换期间丢失或它们是独立实例。 Aurelia的文档说:
默认情况下,DI容器假定所有内容都是单例 实例;
当我从app实例设置路由器this.userSession.router = router
时,userSession实例不会更新。 this.loggedUser
永远不会从外部定义。
这是我的傻瓜:http://plnkr.co/edit/qXtSGx
答案 0 :(得分:5)
如果您假设用户会话是单例,则问题就在于此。在您的示例中,用户会话是视图模板,它不是单例。无论何时导航到视图,都会创建这些(在当前实现中,这可能会随着缓存而改变)。从视图导航时,它们也会被破坏。
您想要的是一个独立的类,您可以将其注入到视图模型的构造函数中。
export class MyViewModel {
static inject = [UserSession];
constructor(userSession) {
this.userSession = userSession;
}
}
这将创建服务类UserSession的单例实例,即默认行为。然后,容器将在创建视图时将其注入视图模型。