首页 > 解决方案 > Angular 静态提供程序引导程序不会覆盖应用程序根提供程序

问题描述

使用 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)
);

然而,静态提供者必须在 Angular 中解析提供者的起泡顺序中更早,因为提供的对象始终是在应用程序级别的 NgModule 装饰器中传递的一个派生配置对象(即在静态forRoot调用中使用的那个)。

尝试分叉 3rd 方库,将multi添加到提供指令并让依赖项吞下一个数组。但这似乎也不起作用。引导时来自静态提供程序的提供指令被完全忽略(即从未添加到多数组中)。

有任何想法吗?

标签: angularangular6angular-bootstrapangular-providers

解决方案


推荐阅读