Angular 4/5 - 使用动态配置实例化服务

时间:2018-03-21 08:14:53

标签: javascript angular typescript authentication angular-services

我目前正在编写一个公开AuthModule的库,其中包含AuthService,用于使用oidc-client-js处理OAuth2身份验证。但是,我希望使用的应用程序指定OAuth客户端的配置。我知道我可以将配置传递到forRoot的{​​{1}}方法,如下所示:

AuthModule

AuthModule.forRoot({ applicationNamespace: 'ConsumingApp', clientId: 'consuming.app' }); 方法中,我想使用传入的配置提供服务实例。

我设法通过在forRoot对象上设置传入的属性来破解它。然后,我使用window中的window.clientIdwindow.applicationNamespace的引用。

AuthService

有没有更好的方法来实现这个目标?

1 个答案:

答案 0 :(得分:1)

这可以使用注入令牌以下列方式完成。

第1步:为传入的配置对象创建InjectionToken,如下所示:

export const AUTH_CONFIG = new InjectionToken<AuthConfig>('authConfig');

第2步:将令牌注入AuthService构造函数

第3步:将配置对象传递给模块的forRoot函数

public static forRoot(authConfig: AuthConfig): ModuleWithProviders

步骤4:使用传入的配置作为注入令牌的值

{ provide: AUTH_CONFIG, useValue: authConfig }