Angular JS: почему разница между впрыском module.config и впрыском контроллера?

Это то, что я не мог понять, покопавшись в коде AngularJS, может быть, вы поможете разгадать тайну.

Чтобы показать это, я добавил сервис в начальный проект 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);

Вы можете видеть, что этот провайдер предоставляет $ get и определенный «providerMethod».

Теперь для использования инъекций: если мы вызываем config, мы можем внедрить весь класс и получить доступ к «внешнему» методу провайдера:

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

Но когда мы внедряем это в контроллер (обратите внимание на имя без провайдера), раскрывается только возвращаемое значение $ get:

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

Вывод на консоль выглядит следующим образом: это мой сервис myServiceProvider: Constructor {providerMethod: function, $ get: function}, это мой сервис service.providerMethod MyCtrl1.myservice = Object {name: "stam"} stam

Кто-нибудь может объяснить разницу? Причина? большое спасибо за любую мысль

Лиор

PS: я видел эту технику в angular-uiновый UI-роутер (отличный проект!). Мне нужен доступ к внешнему классу провайдера, чтобы делать инъекции в жасмине и других местах - безрезультатно

Ответы на вопрос(2)

Ваш ответ на вопрос