У меня есть служба, которая устанавливается как часть общего модуля, например.
export class MyService {
construct() { }...
}
export class CoreModule {
constructor(@optional() @SkipSelf() core: CoreModule)
{
if (core)
{
throw new Error('Only one instances')
}
}
static forRoot() : ModuleWithProviders {
return{
ngModule: CoreModule,
providers: [MyService]
};
}
}
Я хочу внедрить этот CoreModule (поделиться как singleton) в другой модуль, который будет использовать myService.
Сценарий - компонент A загружается, например. компонент B динамически
Один мой компонент динамически загружает другое представление компонента, используя viewContainerRef.createComponent (componentFactory), кажется, создается новый экземпляр CoreModule, но мне нужно, чтобы это был синглтон или служба, чтобы быть синглтоном, когда он вводится в компонент A, но компонент B, похоже, создает новые экземпляры, у меня уже установлено значение при загрузке компонента приложения.
Этот CoreModule загружается лениво или сразу же загружается и импортируется в app.module.ts?
У меня CoreModule загружен в app.module.ts и CoreModule.forRoot ()
В итоге я сделал myService одноэлементным (как статическим), чтобы на него можно было легко ссылаться во всем приложении. Общий модуль и т. д. Не работает с модулем отложенной загрузки, поскольку они получают свой собственный контекст, и любой поставщик будет инициализирован





Это невозможно, если вы хотите поделиться всем модулем, вы должны установить его в качестве поставщика в модуль приложения.