Почему Angular позволяет внедрить сервис $provide в блоки конфигурации?

Согласно документации Angular, мы можем вводить провайдеры (не экземпляры) только в блоки конфигурации. https://docs.angularjs.org/guide/module#module-loading-dependencies

Но в отличие от этого Angular позволяет вам вводить $provide или $inject, несмотря на то, что они являются экземплярами службы singleton.

https://docs.angularjs.org/api/auto/service/$provide< /а>


person Vikash Kumar    schedule 10.06.2017    source источник
comment
Узнайте, что такое провайдер: docs.angularjs.org/guide/providers (Service , Фабрика, Провайдер и многое другое). (Кроме того, все службы в angular являются экземплярами singleton).   -  person ippi    schedule 10.06.2017
comment
@ippi, я думаю, что человек, задавший вопрос, ознакомился с документацией. Так что, если НЕ можете ответить, пожалуйста, НЕ демотивируйте людей. #Держись подальше   -  person Ashish Kumar    schedule 12.06.2017


Ответы (1)


Мне стало любопытно, поэтому я провел небольшое исследование. Вот что я нашел:

  1. $injector не может быть введен в блоки конфигурации
  2. $provide может быть введен в блоки конфигурации

В коде причина 2 заключается в том, что $provide помещается в providerCache до того, как будет создан providerInjector (инжектор, используемый в блоках конфигурации). Это гарантирует, что он всегда будет известным поставщиком для providerInjector. https://github.com/angular/angular.js/blob/master/src/auto/injector.js#L671

Тем не менее, я согласен с тем, что возможность вводить $provide в блоки конфигурации, похоже, противоречит общему правилу относительно того, что можно вводить в блоки конфигурации, изложенным здесь: https://docs.angularjs.org/guide/module#зависимостизагрузкимодулей

Несмотря на то, что это явно продемонстрировано здесь: https://docs.angularjs.org/guide/module#configuration-blocks

$provide может быть единственным исключением из общего правила.

person Benny Johansson    schedule 15.07.2017