Есть три библиотеки:
ParentA,
ChildA и
ChildB.
Библиотеке
ParentA при подключении требуется объект
parent_a_config: ParentAModuleOptions при подключении в
app.module.ts:
// app.module.ts
import 'ParentAModuleOptions, ParentAModule' from '@example/parent-a';
const parent_a_config: ParentAModuleOptions = {
a: environment.a,
b: environment.b
};
// ...
imports: [
// ...
ParentAModule.forRoot(parent_a_config),
// ...
],
// ...
// parent-a.module.ts
export class ParentAModule {
static forRoot(options?: ParentAModuleOptions): ModuleWithProviders {
return {
ngModule: ParentAModule,
providers: [
{
provide: PARENT_A_OPTIONS_TOKEN,
useValue: options,
}
]
};
}
}
// parent-a.service.ts
// ...
constructor(
@Inject(PARENT_A_OPTIONS_TOKEN) private config: ParentAModuleOptions
) {
this.setConfig(config);
}
// ...
Библиотеки
ChildA и
ChildB используют сервис библиотеки
ParentA. Это значит в
package.json файле каждой библиотеки прописано следующее:
Код:
|
{
"name": "@example/child-x",
"version": "1.0.0",
"license": "MIT",
"repository": {
"type": "git",
"url": "https://example.git"
},
"dependencies": {
"@example/parent-a": "^1.0.0",
}
} |
И при использовании сервиса
ParentAService в сервисе
ChildAService, сервис подключается напрямую из
node_modules:
// child-a.service.ts
import 'ParentAService' from '@example/parent-a';
// ...
constructor(
@Inject(CHILD_A_OPTIONS_TOKEN) private config: ChildAModuleOptions,
private parent_a_service: ParentAService
) {
this.setConfig(config);
}
// ...
Но ведь библиотеке
ParentA нужно передать объект конфига, а я не понимаю как это сделать ВНЕ
app.module.ts.
И ещё, библиотеки
ChildA и
ChildB используют сервис
ParentAService, так как у каждой библиотеки установлена в node_modules своя ParentA библиотека. Это получается что образуется два экземпляра класса
ParentAService? Разве экземпляр класса (любого) сервиса не должен быть дитём синглтона?
Подскажите как архитектурно правильно подойти в использовании
ParentAService в
ChildA и
ChildB библиотеках.