1

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

这是我要实现的目标的具体示例。

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

我想创建一个将公共/导出服务与私有服务区分开来的 ServiceModule。

@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.

任何帮助是极大的赞赏

4

1 回答 1

0

您可以private在使用该服务的每个组件中使用您的提供者(服务):

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

  constructor(private _service: MyPrivateSrvice) { }

}

这种方法使您能够不将 Service 作为提供者声明到您的根模块或共享模块中。

于 2017-01-30T11:57:43.780 回答