Angular JS: por que a diferença entre injeção module.config e injeção de controlador?

Isso é algo que eu não consegui descobrir ao usar o código do AngularJS, talvez você possa ajudar a resolver o mistério.

Para mostrá-lo, adicionei um serviço ao projeto de sementes AngularJS:

function MyServiceProvider() {
    console.log('its my service');
    this.providerMethod = providerMethod;

    function providerMethod() {
        console.log('its my service.providerMethod');
    }

    this.$get = $get;

    function $get() {
        var innerInjectable = {
             name: 'stam'
        };
        return innerInjectable;
    }
}

var serviceModule = angular.module('myApp.services', []).
    value('version', '0.1').
    provider('myservice',MyServiceProvider);

Você pode ver que esse provedor expõe $ get e um determinado 'providerMethod'.

Agora, para o uso de injeção: Se chamarmos config, podemos injetar a classe inteira e obter acesso ao método do provedor 'externo':

serviceModule.config(function(myserviceProvider) {
    console.log('myServiceProvider:',myserviceProvider);
    myserviceProvider.providerMethod();
});

Mas quando injetamos isso em um controlador (observe o nome sem provedor), apenas o valor de retorno $ get é exposto:

function MyCtrl1(myservice) {
    console.log('MyCtrl1.myservice =',myservice,myservice.name);
}
MyCtrl1.$inject = ['myservice'];

A saída do console segue como deveria: my service myServiceProvider: Construtor {providerMethod: function, $ get: function} seu my service.providerMethod MyCtrl1.myservice = Objeto {name: "stam"} stam

Alguém pode explicar a diferença? O motivo? Muito obrigado por qualquer pensamento

Lior

PS: Eu vi essa técnica em angular-uiNovo roteador ui (excelente projeto!). Eu preciso de acesso à classe de provedor externo para fazer injeção em jasmim e outros lugares - sem sucesso

questionAnswers(2)

yourAnswerToTheQuestion