Я знаю, что стратегия контекста DI по умолчанию Angular2 заключается в расширении контекста внедрения зависимостей в масштабе всего приложения. Но я бы хотел, чтобы некоторые 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
.
Любая помощь приветствуется
PubliclyExportedService
anew PrivateService()
. Я прав? - person Linvi   schedule 30.01.2017public
илиprivate
. Я предложил способ сохранить сервисыprivate
. В любом случае я должен внедрить их через конструктор как дляprivate
, так и дляpublic
сервисов. (Терминprivate
здесь неверен, но вы угадаете, о чем я. - person DDRamone   schedule 30.01.2017PubliclyExportedService
вexports
. (angular.io/docs / ts / latest / api / core / index /) - person DDRamone   schedule 30.01.2017