我有一种情况,我需要用 app.module 中的 config.json 值替换一些硬编码值。我们能做到吗?
能够添加 APP_INITIALIZER 和 useFactory 并能够在其他组件中注入服务,并且工作正常但无法在 app.module 中实现。
我想用我在 APP 模块中创建的运行时配置替换一些 MSAL 客户端和其他属性,但它提供了 CE。
let appConfig: ConfigType;
const appInitializerFn = (configService: ConfigService)=>{
return () => {
configService.loadAppConfig();
appConfig = configService.getConfig();
};
};
export function MSALInstanceFactory(configService: ConfigService): IPublicClientApplication {
return new PublicClientApplication({
auth: {
clientId: configService.getConfig().clientId, //I need to replace like this but not working
authority: 'https://login.microsoftonline.com/common',
redirectUri: 'http://localhost:4200'
},
cache: {
cacheLocation: 'localStorage',
storeAuthStateInCookie: isIE, // Set to true for Internet Explorer 11
}
})
}
@NgModule({
declarations: [
AppComponent,
HomeComponent,
ProfileComponent
],
imports: [
BrowserModule,
AppRoutingModule,
MatButtonModule,
....
.....
{
provide: APP_INITIALIZER,
useFactory: appInitializerFn,
multi: true,
deps: [ConfigService]
},
{
provide: MSAL_INSTANCE,
useFactory: MSALInstanceFactory
},
MsalGuard],
bootstrap: [AppComponent, MsalRedirectComponent] // MsalRedirectComponent bootstrapped here
})
export class AppModule { }
正在低于编译时错误:
错误:src/app/app.module.ts:49:11 - 错误 TS2322: 类型 'string | undefined' 不能分配给类型 'string'。类型“未定义”不可分配给类型“字符串”。
49 clientId:appConfig.clientId,~~~~~~~~
node_modules/@azure/msal-browser/dist/config/Configuration.d.ts:21:5 21 clientId: string; ~~~~~~~~ 预期的类型来自属性'clientId',它在'BrowserAuthOptions'类型上声明
错误:src/app/app.module.ts:49:21 - 错误 TS2454:变量 'appConfig' 在被分配之前被使用。
49 clientId: appConfig.clientId,