【发布时间】:2021-06-07 16:52:59
【问题描述】:
我的目标是从 AppConfigService 异步获取“clientId”,并在应用启动之前将其用作“GoogleLoginProvider”函数的“clientId”。
我可以将它放在环境变量中,但在我的具体情况下,它不是一个选项。
我正在使用 Angular 8。
import { APP_INITIALIZER } from '@angular/core';
export function getGoogleClientId(appConfigService: AppConfigService) {
return () => appConfigService.getGoogleClientId().toPromise().then((clientId) => {
// service reliably returns clientId here
});
}
const getGoogleId: Provider = {
provide: APP_INITIALIZER,
useFactory: getGoogleClientId,
deps: [AppConfigService],
multi: true
}
@NgModule({
providers: [
{
provide: 'SocialAuthServiceConfig',
useValue: {
autoLogin: false,
providers: [{
id: GoogleLoginProvider.PROVIDER_ID,
provider: new GoogleLoginProvider(clientId), //<-- How do I get the service's "clientId" here?
}],
} as SocialAuthServiceConfig
}
]
})
export class AppModule {}
【问题讨论】:
-
您好,this solution可以帮到您吗?
-
@sohaieb 我想我已经在使用这个解决方案来获取 clientId。我的问题是,一旦我有了 clientId,如何将它放入 GoogleLoginProvider?
-
这个来源怎么样:Dynamic Dependency Injection?在这个解释中,您可以为您的 clientId 注入 http 请求并从 apiFactory 方法获取结果..
-
@sohaieb 我认为这个解释让我处于同样的境地。该解释显示了如何动态添加类而不是提供者本身或提供者的一部分。如果您查看我的代码,您会发现我没有添加类。我需要在注入之前或引导应用程序之前添加一个提供程序的 id。