Angular 4/5 - 使用动态配置实例化服务
Angular 4/5 - Instantiate service with dynamic configuration
我目前正在编写一个公开 AuthModule
的库,其中包含一个 AuthService
用于使用 oidc-client-js
处理 OAuth2 身份验证。但是,我希望消费应用程序指定 OAuth 客户端的配置。我知道我可以将配置传递给 AuthModule
的 forRoot
方法,如下所示:
AuthModule.forRoot({
applicationNamespace: 'ConsumingApp',
clientId: 'consuming.app'
});
在 forRoot
方法中,我想提供一个带有传入配置的服务实例。
我已经设法通过在 window
对象上设置传入的属性来破解它。然后我在 AuthService
.
中使用对 window.clientId
和 window.applicationNamespace
的引用
(window as any).applicationNamespace = authConfig.applicationNamespace;
(window as any).clientId = authConfig.clientId;
有没有更好的方法来完成这个?
这可以使用注入令牌通过以下方式完成。
第 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 }
我目前正在编写一个公开 AuthModule
的库,其中包含一个 AuthService
用于使用 oidc-client-js
处理 OAuth2 身份验证。但是,我希望消费应用程序指定 OAuth 客户端的配置。我知道我可以将配置传递给 AuthModule
的 forRoot
方法,如下所示:
AuthModule.forRoot({
applicationNamespace: 'ConsumingApp',
clientId: 'consuming.app'
});
在 forRoot
方法中,我想提供一个带有传入配置的服务实例。
我已经设法通过在 window
对象上设置传入的属性来破解它。然后我在 AuthService
.
window.clientId
和 window.applicationNamespace
的引用
(window as any).applicationNamespace = authConfig.applicationNamespace;
(window as any).clientId = authConfig.clientId;
有没有更好的方法来完成这个?
这可以使用注入令牌通过以下方式完成。
第 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 }