javascript - 访问我们传递给另一个对象的函数内的注入(inject)依赖项

标签 javascript typescript lambda dependency-injection aurelia

抱歉,我不太知道如何表达这个问题。关键在于,在重定向回应用程序时,重定向处理程序需要有权访问注入(inject)的 UserManager。

import { autoinject } from "aurelia-framework";
import { UserManager } from "oidc-client";
import { OpenIdConnectRouting } from "./open-id-connect-routing"; 

@autoinject
export class OpenIdConnect {

    constructor(
        private routerConfigurationService: OpenIdConnectRouting,
        public UserManager: UserManager) { }

    public Configure(routerConfiguration: RouterConfiguration) {

        this.routerConfigurationService.ConfigureRouter(
            routerConfiguration,
            this.PostLogoutRedirectHandler);
    }

    public PostLogoutRedirectHandler = (): Promise<any> => {
        return this.UserManager.signoutRedirectCallback(null);
    }
}

上面的代码将 PostLogoutRedirectHandler 传递给路由服务,以便当用户从授权服务器返回时,处理程序将触发。

上面的代码可以工作,但是处理程序是 lamda,仅用于捕获 this 中的当前对象。当处理程序是一个函数时,this不是我们期望的那样,并且我们无法访问注入(inject)的UserManager对象。

为什么上面的代码适用于 lambda 而不适用于函数?使用 lambda 是一种合理的方法吗?如果没有,有没有办法用函数来做到这一点?

编辑:

这是上述处理程序的函数/方法版本。

public PostLogoutRedirectHandler(): Promise<any> {
    this.logger.Debug("PostLogoutRedirectHandler");
    return this.UserManager.signoutRedirectCallback(null);
}

它抛出以下错误:

Cannot read property 'UserManager' of undefined

当然,使用 lambda 箭头函数 是可行的。这种箭头函数方法是合理模式还是反模式?其成本是多少?

最佳答案

您需要使用 .bind(this) 来传递 this 对象以用于回调或 Promise 等外部执行函数:

function(){
  //code what will be execute out from current object
}.bind(this)

关于javascript - 访问我们传递给另一个对象的函数内的注入(inject)依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39678741/

相关文章:

javascript - jQuery 样式重应用效率

javascript - 如何使每个 `<li>` 具有不同的背景颜色?

javascript - typescript D3 v4 导入不工作

java 以下枚举中的 {{ }} 和 -> 是什么

C++ STL - STL sort() 的第三个参数如何工作?

javascript - 将 Mongoose 对象转换为特定的 json 模式(对象)

javascript - While 循环没有将正确的结果推送到数组

reactjs - React 和 Typescript 功能组件可以是 3 个接口(interface)之一

javascript - 在 Typescript 中,从 Typeings 导入时如何使用 Javascript 模块

c# - Expression.Body 作为 MemberExpression 为原始属性返回 null