Angular静态提供程序引导未覆盖应用程序根提供程序

时间:2018-09-11 14:25:43

标签: angular angular6 angular-bootstrap angular-providers

使用Angular 6.0.3

具有导入到根应用程序模块中的第三方Azure Adal包装器:

@NgModule({
  imports: [
  ....
  <3rd party module>.forRoot(<configuration object here>)
  ....
  ]
})
export class AppModule {} 

[第三方模块定义]

@NgModule()
export class <3rd party module> {
  static forRoot(@Inject(<thing to override>) config): ModuleWithProviders {
    return {
      ngModule: <3rd party module>,
      providers: [ 
        ... 
        { provide: <thing to override>, useValue: config } 
        ... 
      ]
    }
  };
}

传递给forRoot的配置用作提供程序的useValue参数。以为我可以在模块的引导期间覆盖提供的对象:

<fetch configuration form server>
.then(json => 
  platformBrowserDynamic(
    [ { provide: <thing to override>, useJson: json } ]
  )
  .boostrapModule(AppModule)
);

但是,由于提供的对象始终是在应用程序级别在NgModule装饰器中传递的一个派生配置对象,因此静态提供者必须早于冒泡顺序才能在Angular中解析提供者。 forRoot通话。)

尝试分叉第三方库,在provider指令中添加 multi ,并让相关者吞下一个数组。但这似乎也不起作用。完全忽略引导时(即从不将其添加到多数组中),静态提供程序提供的Provide指令。

有什么想法吗?

0 个答案:

没有答案