Везде рекомендуется регистрировать сервис в корневом массиве провайдеров AppModule и избегать использования массива провайдеров корневого AppComponent. Когда кто-то должен зарегистрировать службу в корневом AppComponent? Любой практический пример. В чем преимущество регистрации сервиса в корневом AppModule по сравнению с корневым AppComponent?
Зарегистрируйте службу в корневом AppModule или корневом AppComponent.
Ответы (3)
При регистрации в корне предоставляемая служба создается как одноэлементная, в отличие от предоставления в компоненте, она будет создана столько экземпляров, сколько вы используете компонент.
Другими словами:
Служба, внедренная на корневом уровне, будет доступна во всем приложении.
Служба, предоставляемая на уровне компонента, будет доступна только для этого компонента и его дочерних элементов.
Если вы внедрите службу в несколько компонентов (@Component({ ...providers: [] ..}
), каждый из них получит свой собственный экземпляр, а их дочерние элементы будут использовать один и тот же экземпляр.
Если вы внедрите его на корневом уровне (@NgModule({ ... providers: []}
), все компоненты будут использовать один и тот же экземпляр.
Подробнее здесь
Вы можете зарегистрировать сервис в app.module или в app.component. Разница в том, что когда вы регистрируете службу в app.module, ее можно внедрить как зависимость в любой компонент и службу, но при регистрации в app.component ее можно внедрить как зависимость только в компоненты.
Вы не можете зарегистрировать службу в компоненте. Каждая служба должна быть зарегистрирована в модуле.
@NgModule({
imports: [
CommonModule,
etc
],
declarations: [
AppComponent,
Other components and stuff related to this module
],
exports: [
What you want to export if this module is imported by another
],
providers: [
YourService
]
Например, я храню все свои сервисы в «CoreModule» и просто импортирую CoreModule в AppRoot.
Надеюсь помочь с этим ответом.