具有私有嵌套DI上下文的Angular2模块

时间:2017-01-30 11:46:05

标签: angular dependency-injection angular2-modules

我知道Angular2默认的DI Context策略是为了丰富应用程序范围的依赖注入上下文。但我希望有些Injectables不能全球使用。

这是我想要实现的具体例子。

可能有一个文档解释了如何这样做,但我找不到它。

我想创建一个ServiceModule来区分Public / Exported服务和私有服务。

@Injectable() export class PrivateService{} // Not available in AppModule
@Injectable() export class PubliclyExportedService{ // Available in AppModule
  constructor(private privateService: PrivateService) { }
}

// The imported module
@NgModule({
  exports: [PubliclyExportedService],
  declarations: [PubliclyExportedService],
  providers: [
    PubliclyExportedService,
    PrivateService
  ]
})
export class ServiceModule {}

// The main module
@NgModule({
  imports: [ServiceModule]
})
export class AppModule { }

目标是使用依赖注入,以便PubliclyExportedService可以使用PrivateService,但ServiceModule之外的任何类都无法注入PrivateService。< / p>

非常感谢任何帮助

1 个答案:

答案 0 :(得分:0)

您可以将private提供程序(服务)用于正在使用该服务的每个组件:

 @Component({
  ...
  providers: [
    MyPrivateService // <= Using provider into this class
  ]
})
export class FeatureComponent{

  constructor(private _service: MyPrivateSrvice) { }

}

此方法使您无法将Service作为提供者声明到根模块或共享模块中。