Как инициировать несколько root предоставляемых сервисов при инициализации приложения в Angular 8? - PullRequest
0 голосов
/ 25 января 2020

У меня есть несколько initializable сервисов, которые реализуют этот простой интерфейс:

interface InitializableService {
   init(): void;
}

Эти сервисы создают некоторые глобальные подписки (локальные и внешние), которые мне нужны во время работы моего приложения. Сейчас я делаю эти сервисы в моем app.component.ts и называю их один за другим. Я хочу автоматизировать этот процесс.

Я нашел некоторую информацию о способах сделать это, и я просто нашел способы сделать это при предоставлении услуг в модуль. Я предоставляю эти сервисы в root и не хочу их менять, кроме того, что при первоначальном расположении требуется то же самое время, чтобы просто внедрить их в app.components.ts.

Я попытался создать базовый класс и расширить его так, каждый сервис класса, который его реализует, будет автоматически инициализироваться при загрузке приложения, но я не смог получить список сервисов, которые расширяют этот класс для вызова init.

Понятия не имею с чего начать, или, если это возможно, с помощью provideIn: 'root' услуг.

1 Ответ

0 голосов
/ 25 января 2020

Вы пытались использовать Модули с провайдерами?

решение состоит в том, чтобы создать модуль, например, core.module.ts

, а затем импортировать модуль в app.module.ts.

Ключ в том, что внутри основного модуля, используя модуль с провайдерами, вы можете инициализировать эти полезные сервисы.

Используя обеспечение в root, мне просто не нравится

core.module.ts Будет что-то вроде этого

import { ModuleWithProviders, NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { UsersData } from './data/users';
import { UsersService } from './mock/users.service';

const DATA_SERVICES = [
  { provide: UsersData, useClass: UsersService },
];

@NgModule({
  imports: [
    CommonModule,
  ],
  providers: []
})
export class CoreModule {
  static forRoot(): ModuleWithProviders {
    return {
      ngModule: CoreModule,
      providers: [
        ...DATA_SERVICES,
      ]
    } as ModuleWithProviders;
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...