Using the resolve method broke all my unit tests... I went with this way, where settings is a service. 
$q.when(settings.loadConfig()).then(function () {
  console.log( settings.versionedApiUrl );  
});
Then, i check if we've already loaded settings to make sure we don't request more than once.
class settings {
    loadConfig = ( ):angular.IPromise<any> =>  {
                var deferred = this.q.defer();
                if( this.settingsLoaded  ){
                      deferred.resolve({})
                      return deferred.promise;
                }
                this.http({
                      url:'config.json'
                }).then((result) => {
                      if( result.data ){
                            this.versionedApiUrl = result.data.versionedApiUrl;
                            this.apiServer = result.data.apiServer;
                            this.widgetServiceRoot = result.data.widgetServiceRoot;
                            this.settingsLoaded = true;
                      }
                      deferred.resolve({});
                });
                return deferred.promise;
          }
}