В провайдер нельзя инжектить сервисы, только другие провайдеры (и константы). Связано это с тем, что провайдер можно внедрять на стадии конфига, чтобы иметь возможность сконфигурировать сервис. Во время стадии конфига сервисы ещё недоступны, так что внедрить их не выйдет.
Если у тебя провайдер, то сервисы нужно внедрять в твой сервис. т.е. в функцию, которая в поле $get:
angular.module('foo')
.provider('$foo', ['сюда внедрять только провайдеры и константы, не сервисы', function (...) {
return {
$get: ['а сюда можно внедрить сервисы', function (...) { }
};
}
]);
// Или в более читабельном виде:
angular.module('foo')
.provider('foo', fooProvider);
fooProvider.$inject = ['$httpProvider', 'someAnotherProvider'];
function fooProvider($httpProvider, someAnotherProvider) {
var provider = this;
provider.someProperty = 'someValue';
provider.$get = foo;
//////////
foo.$inject = ['$http', 'anotherService'];
function foo($http, anotherService) {
var service = {};
service.bar = bar;
service.foo = 1;
return service;
//////////
function bar () {
return provider.someProperty;
}
}
}