0

我有一种情况,我需要用 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,

4

0 回答 0