首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在main.ts中使用构造函数注入服务

在main.ts中使用构造函数注入服务
EN

Stack Overflow用户
提问于 2018-12-11 05:59:18
回答 1查看 1.8K关注 0票数 0

在我的Angular项目中,我使用AWS Amplify来处理我的身份验证。现在,我想将其配置为使用cookies管理令牌。

在阅读文档之后,我发现我需要在main.ts中提供my own storage to Amplify

因此,我安装了ngx-cookie,并开始了库方法和AWS Amplify签名之间的映射,如下所示:

main.ts

class MyStorage {

  constructor(private cookieService: CookieService) { }

  setItem(key: string, value: string) {
    this.cookieService.put(key, value);
  }

  getItem(key: string): string {
    return this.cookieService.get(key);
  }

}

Amplify.configure({
  ...amplify,
  Auth: {
    oauth: oauth,
    cookieStorage: {
      domain: 'localhost'
    },
    storage: new MyStorage(), <--- expect a cookieService here
  }
});

Problemnew MyStorage()需要一个cookieService in参数,但似乎无法在main.ts中添加构造函数。

Question:如何在main.ts中传递服务?

谢谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-11 06:32:46

main.ts是Angular应用程序的入口点。在这里,我们无法查询服务实例或注入它们,因为我们在Angular应用程序之外。看起来Storage对象也与Angular应用程序完全解耦了,所以你要注入的任何依赖项都必须自己做。

同样值得注意的是:虽然我找不到任何关于这方面的显式文档,但亚马逊这个存储类的example的所有属性都是静态的,所以我不确定配置是否需要一个类的实例。

我的一个想法是劫持APP_INITIALIZER,以便在应用程序首次启动时获得DI令牌。但是,我不熟悉Amplify,所以我不知道什么时候需要配置它,所以这可能会也可能不会起作用:

App.module.ts

providers: [
  {
    provide: APP_INITIALIZER,
    useFactory: amplifyConfigFactory,
    deps: [CookieService],
    multi: true
  }
]

amplifyConfigFactory.factory.ts

export function amplifyConfigFactory(cookieService: CookieService) {
  Amplify.configure({
    // ....
    storage: new MyStorage(cookieService)
  });

  return () => Promise.resolve(); // factories must return a Promise
}

因此,上面的deps条目被实例化并按顺序注入到工厂中,我们可以使用来自注入器的cookieService创建一个MyStorage

同样,如果MyStorage上的属性必须是静态的,那么这里需要一个不同的解决方案。在我看来,Angular应用程序不应该知道MyStorage,但这取决于是否需要在APP_INITIALIZER钩子之前配置Amblify,这是可行的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53714308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档