在environment.ts中

时间:2018-02-01 09:26:21

标签: angularjs dependency-injection

我有一个Angular 5应用程序需要在应用程序实际启动之前从服务(来自VSTS)加载一些配置文件。我通过在app.module.ts中的bootstrap上加载JSON文件来实现这一点:

// above the NgModule-decorator
export function init(settingsProvider: SettingsProvider) {
  return () => settingsProvider.loadConfig();
}

// in providers-array of the @NgModule decorator
providers: [{
    'provide': APP_INITIALIZER,
    'useFactory': init,
    'deps': [SettingsProvider],
    'multi': true
}

这会在settingsProvider(加载JSON文件的标准服务)中加载JSON配置文件。 现在我需要在环境变量中使用此settingsProvider的一些参数。

(让我告诉你我的 settingsProvider:

@Injectable()
export class SettingsProvider {

  private config : any;

  constructor(private http: Http) {
  }

  public loadConfig() : Promise<any>{
    return this.http.get("assets/client-config.json")
      .map(res => res.json())
      .toPromise()
      .then(settings => {
        this.config = settings
      });
  }

  public get configuration(): any {
    return this.config;
  }
}

但是由于environment.ts只是一个常数,我不能在那里注入任何服务。

所以我想要的解决方案是这样的:

environment.ts

export const environment = {
  production: true,
  apiBaseUrl: '/',
  clientId: settingsProvider.configuration.clientId,  // <-- Here's the problem, because I cannot inject settingsProvider
  enableAdalDebug: false
};

有没有人知道这个问题的解决方案?

0 个答案:

没有答案