Angular 6 Dependency Injection не предоставляет одноразовые сервисы. - PullRequest
0 голосов
/ 11 января 2019

У меня есть два модуля AppModule и lazyLoadModule. где я ленивый загрузки lazyLoadModule из Appmodule. Я хочу поделиться своими провайдерами с лениво загруженным модулем см. . Я создал SharedProviderModule следующим образом и импортировал в AppModule с помощью SharedProviderModule.forRoot ():

import { NgModule, APP_INITIALIZER, ModuleWithProviders  } from '@angular/core';
import { CounterService } from './counter.service';
@NgModule({
})
export class SharedProviderModule {
    static forRoot(): ModuleWithProviders {
    return {
      ngModule: SharedProviderModule ,
      providers: [ CounterService 
      {
        provide: APP_INITIALIZER,
        useFactory: appConfigFactory,
        deps: [CounterService],
        multi: true
      },
]
    }
  }
}

Согласно справочному провайдеру блога должен быть один экземпляр для обоих модулей, но сейчас для лениво загруженного модуля инициируется новый экземпляр провайдера. Я переопределяю некоторые значения, используя фабричный провайдер в SharedProviderModule, которые не отражаются в лениво загруженном модуле. Это то, что я забыл сделать?

1 Ответ

0 голосов
/ 11 января 2019

Ваш лениво загруженный модуль автоматически получит доступ ко всем провайдерам, зарегистрированным в приложении. Когда ваш лениво загруженный модуль импортирует модуль с forRoot, он на самом деле снова регистрирует этих провайдеров, вызывая вашу проблему.

У вас никогда не должно быть общего модуля, содержащего провайдеров, если только вы не хотите, чтобы они были одиночными. Если и для вашего AppModule, и для лениво загруженного модуля требуется поставщик, зарегистрируйте или импортируйте его в AppModule, и он будет доступен везде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...