我正在使用 APP_INITIALIZER 从 json 获取配置并且它工作正常。早些时候我有一个身份验证保护作为应用程序的一部分,它曾经很好用。
然后我们将授权逻辑拆分到一个库中,如果我们调用 forRoot() 或者如果我们为 config 提供静态值但允许动态配置,我使用库中的 InjectionToken 来提供配置而不调用 forRoot,它可以正常工作。
app.module.ts的代码是这样的:
let authConfig: any;
export function authConfigFactory() {
return authConfig;
}
export function appInitializerFn(appConfigService: AppConfigService) {
return () => {
return appConfigService.loadAppConfig().then(() => {
authConfig = {
clientId: appConfigService.getConfig().CLIENT_ID,
tokenEndpoint: appConfigService.getConfig().TOKEN_URL,
redirectURL: "http://localhost",
};
});
};
};
@NgModule({
.....
imports: [
..
AuthLib
],
providers: [
AppConfigService,
{
provide: APP_INITIALIZER,
useFactory: appInitializerFn,
multi: true,
deps: [AppConfigService]
},
AuthLibService,
{
provide: 'authConfig',
useFactory: authConfigFactory,
deps: []
}, …Run Code Online (Sandbox Code Playgroud)