Я знаю, что стратегия контекстного соглашения с Angular2 по умолчанию заключается в том, чтобы обогатить контекст инжекции зависимых приложений. Но я бы хотел, чтобы Injectables
не был доступен по всему миру.Модуль Angular2 с приватным вложенным DI Контекстом
Вот конкретный пример того, чего я пытаюсь достичь.
Возможно, есть документ, объясняющий, как это сделать, но я не смог его найти.
Я хотел бы создать 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
.
Любая помощь очень ценится
Вы пытались исключить PrivateService из модуля и включить его в @Component, где вы используете эту услугу? – DDRamone
В чем проблема с этим, кроме объявления сервиса? – raj
@DDRamone Я не могу этого сделать, потому что я хочу, чтобы частные службы были введены, чтобы их можно было издеваться. Если я последую тому, что вы имели в виду, вы бы сделали в конструкторе 'PubliclyExportedService'' новый PrivateService() '. Я прав? – Linvi