Насколько я понимаю, единственная разница между использованием providedIn: 'root'
и добавлением вашего провайдера в массив providers
модуля заключается в встряхивании дерева. В настоящее время мое приложение работает нормально, если я добавляю providedIn: 'root'
, оно работает нормально, но если я удалю его и добавлю в массив поставщиков модуля, я получаю StaticInjectorError
, в котором говорится, что он не может найти поставщика. Кто-нибудь видел это или понимал, почему это могло произойти? Из документов я считаю, что добавление его в массив поставщиков должно позволить этому работать
Ошибка довольно очевидна. ЕСЛИ вы делаете providedIn: 'root'
, тогда ваша служба регистрируется на RootInjector. И, следовательно, он в основном доступен для использования во всем приложении без необходимости вручную добавлять его в массив providers
каждого модуля, в котором вы хотите использовать эту службу.
Но теперь, когда вы удалили providedIn: 'root'
из декоратора @Injectable
, он будет доступен только для модулей, в которые вы добавляете его в массив providers
этих модулей. Или он будет доступен модулям, которые импортируют модули, для которых служба добавлена в массив providers
.
Вот Образец StackBlitz, который поможет вам лучше понять это.
Просто чтобы описать:
AppModule
, NewModule
и NotImportedModule
.NewModule
и NotImportedModule
в AppModule
AppComponent
.NewModule
SampleService
добавляется к массиву provides
NewModule
, а NewModule
добавляется к массиву imports
AppModule
. Вот почему я могу использовать SampleService
в AppComponent
.NotImportedModule
не добавлен в массив imports
AppModule
, но AnotherService
- это providedIn: 'root'
. Следовательно, я могу использовать его в AppModule
.Это означало бы, что AnotherService
будет доступен для использования во всем приложении, поскольку он зарегистрирован в RootInjector, поскольку мы использовали providedIn: 'root'
на нем.
Но поскольку SampleService
НЕ был providedIn: 'root'
, а был добавлен в массив providers
NewModule
для использования его в AppModule
, нам пришлось добавить NewModule
в массив imports
AppModule
.
Надеюсь, этот пример имеет больше смысла.
Вам нужно предоставить код, а еще лучше пример
stackblitz
...