Показать сообщение отдельно
  #1 (permalink)  
Старый 14.05.2019, 12:22
Профессор
Отправить личное сообщение для Faab Посмотреть профиль Найти все сообщения от Faab
 
Регистрация: 16.04.2012
Сообщений: 310

Посоветуйте как правильно подключить библиотеку
Есть три библиотеки: 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 библиотеках.

Последний раз редактировалось Faab, 14.05.2019 в 12:37.
Ответить с цитированием