anchor.diff:  :marked
     ## External module configuration
     ## 外部模块设置
  +  
     We can register _certain_ module providers when bootstrapping rather than in the root application component. 
     
  -  与其在应用程序根组件里面，我们可以在引导过程中注册_某些_模块供应商。
  +  可以在引导过程中注册_某些_模块供应商，而非在应用程序根组件里。
     
     We'd do this when we expect to select or configure external modules that support our application
     but (a) aren't conceptually part of the application and (b) that we could change later without
     altering the essential logic of the application.
     
  -  当使用支持我们的应用程序，并满足下面两个条件外来组件时，我们应该这样做（在引导过程中注册）：
  +  当使用支持我们的应用的外部组件时，在满足下面两个条件的时候，应该在引导过程中注册：
     a）在概念上不是我们程序的一部分
  -  b）在未来，我们可能需要在不变化主要应用程序逻辑的情况下，更改或更换它。
  +  b）在未来，可能需要在不变化主要应用程序逻辑的情况下更换它。
     
     For example, we might configure the Component Router with different 
     [location strategies](../guide/router.html#location-strategy)  based on environmental factors. 
     The choice of location strategy doesn't matter to the application itself.
     
  -  比如，我们可能用不同的[location strategies](../guide/router.html#location-strategy)，根据不同的环境因数设置不同的组件路由。这个location strategy不直接影响应用程序本身。
  +  比如，根据不同的环境因素设置不同的组件路由， 使用不同的[location strategies](../guide/router.html#location-strategy)。这个location strategy不直接影响应用程序本身。
     
     We could sneak in a fake HTTP backend with sample data during development rather than 
     allow http calls to a remote server (that might not yet exist). 
     We'll switch to the real backend in production. 
     The application shouldn't know or care one way or the other.
     
  -  在开发过程中，我们可以偷偷把一个假的带有例子数据的HTTP后端嵌入进来，来取代对一个远程服务器（可能还不存在）进行http查询。我们在产品发布时再切换到真正的后端。应用程序不需要知道，也不在乎哪个后端。
  +  在开发过程中，可以偷偷把一个假的带有例子数据的HTTP后端嵌入进来，来取代对一个远程服务器（可能还不存在）进行http查询。我们在产品发布时再切换到真正的后端。应用程序不需要知道，也不在乎哪个后端。
     
     See both examples in the following `main.ts`
     where we list their service providers in an array in the second parameter of the `bootstrap` method.
     
  -  在下面`main.ts`的两个例子中，我们在`bootstrap`类方法的第二个参数的数组中，我们列出了它们的service 供应商（服务提供者）。
  +  在下面`main.ts`的两个例子中，在`bootstrap`函数方法的第二个参数的数组中，我们列出了它们的服务供应商。
     
   +makeExample('cb-dependency-injection/ts/app/main.ts','bootstrap','app/main.ts')(format='.') 
   
  
positive.code:   (the `LoggerService`, `UserContext`, and the `UserService`)
    in the `@Component` metadata `providers` array.
    
    在下面的例子中，我们在`@Component`元数据的`供应商`数组中，导入和注册了几个服务（`LoggerService`, `UserContext`和`UserService`)。
  
  +makeExample('cb-dependency-injection/ts/app/app.component.ts','import-services','app/app.component.ts (excerpt)')(format='.') 
  :marked
    All of these services are implemented as classes. 
    Service classes can act as their own providers which is why listing them in the `providers` array
    is all the registration we need.
    
    所有上面这些服务都是用类来实现的。服务类能充当它们自己的供应商，这就是为什么把它们列到一个`供应商`数组里是唯一的注册要求。
  .l-sub-section
    :marked
      A *provider* is something that can create or deliver a service.
      Angular creates a service instance from a class provider by "new-ing" it.
      Learn more about 供应商 [below](#providers).
      一个*供应商*是用来新建或者送交服务的。Angular从一个类供应商里面，通过“new-ing”来新建服务实例的。从[下面](#providers)学习更多关于provders的知识。
  :marked
    Now that we've registered these services,   
    Angular can inject them into the constructor of *any* component or service, *anywhere* in the application.
    
    现在我们已经注册了这些服务，Angular能在应用程序的*任何地方*，将它们注入到*任何*组件和服务的构造函数里面。
  +makeExample('cb-dependency-injection/ts/app/hero-bios.component.ts','ctor','app/hero-bios.component.ts (component constructor injection)')(format='.') 
  
  +makeExample('cb-dependency-injection/ts/app/user-context.service.ts','ctor','app/user-context.service.ts (service constructor injection)')(format='.')    
  
negative.code:   The `LoggerService` doesn't depend on anything. The logger would work if we omitted `@Injectable()`
    and the generated code would be slightly smaller. 
    
    技术上讲，这个`@Injectable()`装饰器只在一个服务类有_自己的依赖_的时候，才是_不可缺少_的。
    `LoggerService`不依赖任何东西，所以该日志服务在没有`@Injectable()`的时候应该也工作，生成的代码也小一些。
    
    But the service would break the moment we gave it a dependency and we'd have to go back and
    and add `@Injectable()` to fix it. We add `@Injectable()` from the start for the sake of consistency and to avoid future pain.
    
    但是在添加依赖给它的那一刻，该服务就会停止工作，要修复它，就必须要添加`@Injectable()`。
    为了保持一致性和防止将来的麻烦，推荐从一开始就添加`@Injectable()`。
  
  .alert.is-helpful
    :marked
      Although we recommend applying `@Injectable` to all service classes, do not feel bound by it.
      Some developers prefer to add it only where needed and that's a reasonable policy too.
      
      虽然我们推荐在所有服务中使用`@Injectable()`，但是你不需要一定要这么做。一些开发者宁可在需要添加的地方才添加，这也是一个合理的策略。
  
  .l-sub-section
    :marked
  