You are correct, it’s impossible to register both foo and bar as constants.
Also for using a provider as a workaround, you almost got it right except that you have to store data in a provider instance:
var app = angular.module('myApp', []);
app.constant('foo', {
message: 'Hello'
});
app.provider('bar', ['foo', function(foo) {
this.data = {
message: foo.message + ' World!'
};
this.$get = function() {
return this.data;
};
}]);
and then in config block, inject a bar’s provider instance (not a bar instance as it isn’t available yet in the config phase):
app.config(['barProvider', function(barProvider) {
console.log(barProvider.data.message);
}]);
Hope this helps.