A more complex but real life example is trying to use `$http` from inside a `HttpResponseInterceptor`.  You have to manually "lazy load" the $http instance within the interceptor rather than specifying it as a dependency, since interceptors must be specified in a `config` block that depends upon the $httpProvider.
```
.factory('teapotInterceptor', ['$injector', function($injector) {
  return function(promise) {
    return promise.then(null, function(originalResponse) {
      // Intercept failed "I'm a teapot" error responses and retry with a different request
      if(originalResponse.status === 418) {
        // Get hold of the $http service
        return $injector.get('$http').get('some/non/teapot/url');
      }
      // otherwise let the fail response fall through
      return promise
    });
  };
}])

// We have to add the interceptor to the queue as a string because the interceptor depends upon service instances that are not available in the config block.
.config(['$httpProvider', function($httpProvider) {
  $httpProvider.responseInterceptors.push('teapotInterceptor');
}]);
```