依赖注入(用于 HttpFetch)在 setRoot in main.js Aurelia



我在为我的授权方服务工作依赖注入时遇到问题。显然,dep-inj 直到 Aurelia "启动"之后才准备好,但我不确定如何访问它。

主.js:

aurelia.container.registerInstance(HttpClient, http.c());
// set your interceptors to take cookie data and put into header
return aurelia.start().then(() => {
let Authorizer = new AuthorizerService();
aurelia.container.registerInstance(AuthorizerService, Authorization);
console.log('Current State: %o', Authorizer.auth);
Authorizer.checkCookieAndPingServer().then(() => { console.log('Current State: %o', Authorizer.auth); aurelia.setRoot(PLATFORM.moduleName('app'));  }, () => { aurelia.setRoot(PLATFORM.moduleName('login-redirect')); });
});

现在的问题是,如果我执行"new AuthorizerService()",那么"this.http.fetch()"在AuthorizerService.js中不可用。

我是否打算将"http.c()"(提供 HttpClient 实例)作为内部的参数传递:

checkCookieAndPingServer(http.c())

还是有别的办法?

我可以删除"新授权服务()"并只做(我编造了这个):

aurelia.container.getInstance(AuthorizerService); 

以某种方式强制它进行依赖注入并检索"http.c()"的"注册实例"?

我不能只检查饼干。为了安全起见,我必须ping服务器,服务器将设置cookie。

我认为这是各种错误的,因为我需要一个默认情况下为 false 的全局参数,然后它对后端服务器进行查询并相应地设置根。也许只在"登录页面"中查询后端?好的,但是我需要做"setRoot(backtoApp);奥雷利亚。另外 SetLoggedIn(true);" 在登录模块中。但是当我设置Root(backtoApp)时,它就会重新开始。

换句话说,当setRoot(login);然后setRoot(backToApp);<--时,AuthorizerService实例没有正确的数据集(例如loggedIn=true)。

编辑:更好的解决方案可能是:

主.js:

return aurelia.start().then(() => {
let Authorizer = aurelia.container.get(AuthorizerService);
let root = Authorizer.isAuthenticated() ? PLATFORM.moduleName('app') : PLATFORM.moduleName('login');
console.log('Current State: %o', Authorizer.auth);
aurelia.setRoot(root);
});

授权方.js

constructor(http) {
this.http = http;
this.auth = {
isAuthenticated: false,
user: {}
}
}

"this.auth"不再是静态的。不再是"静态身份验证 = { isAuthenticated: false }",这是我找到的一些示例代码。

所以现在"身份验证"在"登录"模块中设置。但这意味着每次应用程序短暂加载时都会显示"登录"模块,然后重定向回"setRoot(backToApp)">

如果你想获取实例的类纯粹基于服务类,并且不依赖于某些Aurelia插件,则不需要等到Aurelia开始安全地调用容器。

对于您的示例: aurelia.container.getInstance(AuthorizerService); 它可以是 aurelia.container.get(AuthorizerService);

而且你不应该使用new AuthorizerService(),正如你在问题中注意到的那样。

最新更新