/ / Por que o Angular permite que você injete o serviço $ provide em blocos de configuração? - javascript, angularjs, app-config, angularjs-injector

Por que o Angular permite injetar o serviço $ provide em blocos de configuração? - javascript, angularjs, app-config, angularjs-injector

De acordo com a documentação Angular, só podemos injetar Providers (não instâncias) em blocos de configuração. https://docs.angularjs.org/guide/module#module-loading-dependencies

Mas ao contrário disso Angular permite injetar $provide ou $inject apesar deles serem instâncias de serviço singleton.

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

Respostas:

1 para resposta № 1

Isso me deixou curioso, então fiz algumas pesquisas. Aqui está o que eu encontrei:

  1. $ injector não pode ser injetado em blocos de configuração
  2. $ fornecer pode ser injetado em blocos de configuração

No código, a razão para 2 é que $provide é colocado no providerCache antes de o providerInjector (o injetor usado nos blocos de configuração) é criado. Isso garante que sempre será um provedor conhecido para o providerInjector. https://github.com/angular/angular.js/blob/master/src/auto/injector.js#L671

Dito isto, eu concordo que poder injetar $provide em blocos de configuração parece contradizer a regra geral sobre o que pode ser injetado nos blocos de configuração declarados aqui: https://docs.angularjs.org/guide/module#module-loading-dependencies

Mesmo que seja claramente demonstrado que é algo que você pode fazer aqui: https://docs.angularjs.org/guide/module#configuration-blocks

$provide pode ser a única exceção à regra geral.