特定于每个模块的注射

时间:2019-04-15 12:23:43

标签: angular

我无法在Angular中弄清楚。

我有2个模块,每个模块都使用 MyService ,但是我希望为每个模块以不同的方式(非单项服务)配置此服务。

让我们说:

export class MyService {}

@NgModule({
  provider: [{ provide: MyService, useValue 'A' }]
}
export class ModuleA {
  constructor(test MyService) {
    console.log('ModuleA :', test); // expecting A
  }
}

@NgModule({
  provider: [{ provide: MyService, useValue 'B' }]
}
export class ModuleB {
  constructor(test MyService) {
    console.log('ModuleB :', test); // expecting B
  }
}

但是 MyService 对于两个模块(单个)具有相同的值,取决于先启动的模块是A还是B。

例如,我将拥有:

  

模块A:A

     

ModuleB:A

我希望每个模块都有不同的注入,如模块配置中所述。

1 个答案:

答案 0 :(得分:0)

延迟加载模块将创建所提供服务的单独实例。 more info

您也可以尝试使用@Inject()

export class MyService {}

@NgModule({
  provider: [{ provide: 'MyServiceA', useClass: MyService }]
}
export class ModuleA {
  constructor(@Inject('MyServiceA') test: MyService) {
      //new instance of MyService
  }
}

@NgModule({
  provider: [{ provide: 'MyServiceB', useClass: MyService }]
}
export class ModuleB {
  constructor(@Inject('MyServiceB') test: MyService) {
      //new instance of MyService
  }
}