anchor.diff:    ### Re-providing a service at different levels
   
     You can re-register a provider for a particular dependency token at multiple levels of the injector tree.
  -  You don't *have* to re-register providers. You shouldn't do so unless you have a good reason. 
  +  You don't *have* to re-register providers. You shouldn't do so unless you have a good reason.
     But you *can*.
   
     As the resolution logic works upwards, the first provider encountered wins.
     Thus, a provider in an intermediate injector intercepts a request for a service from something lower in the tree.
     It effectively "reconfigures" and "shadows" a provider at a higher level in the tree.
   
  -  If you only specify providers at the top level (typically the root `AppModule`), the tree of injectors appears to be flat. 
  +  If you only specify providers at the top level (typically the root `AppModule`), the tree of injectors appears to be flat.
     All requests bubble up to the root <span if-docs="ts"><code>NgModule</code></span> injector that you configured with the `!{_bootstrapModule}` method.
   
   .l-main-section
  
positive.code:   img(src="/resources/images/devguide/dependency-injection/component-hierarchy.png" alt="injector tree" width="600")
  
  :marked
    ### Injector bubbling  
  
    When a component requests a dependency, Angular tries to satisfy that dependency with a provider registered in that component's own injector.
    If the component's injector lacks the provider, it passes the request up to its parent component's injector.
  
negative.code:   deeper in the component tree.
  
    Consider again the Car example from the [Dependency Injection](./dependency-injection.html) guide.
    Suppose you configured the root injector (marked as A) with _generic_ providers for
    `CarService`, `EngineService` and `TiresService`.
  
    You create a car component (A) that displays a car constructed from these three generic services.
  