angular2.0依赖注入

Dependency injection

“依赖注入”是提供类的新实例的一种方式,还负责处理好类所需的全部依赖。大多数依赖都是服务。 Angular 使用依赖注入来提供新组件以及组件所需的服务。


Angular 通过查看构造函数的参数类型得知组件需要哪些服务。 例如,HeroListComponent组件的构造函数需要一个HeroService服务:

app/hero-list.component.ts (constructor)

COPY CODE
constructor(private service: HeroService) { }

当 Angular 创建组件时,会首先为组件所需的服务请求一个注入器 (injector)

注入器维护了一个服务实例的容器,存放着以前创建的实例。 如果所请求的服务实例不在容器中,注入器就会创建一个服务实例,并且添加到容器中,然后把这个服务返回给 Angular。 当所有请求的服务都被解析完并返回时,Angular 会以这些服务为参数去调用组件的构造函数。 这就是依赖注入 。

HeroService注入的过程看起来有点像这样:

如果注入器还没有HeroService,它怎么知道该如何创建一个呢?

简单的说,必须在要求注入HeroService之前,在注入器中注册HeroService提供商 Provider。 提供商用于创建并返回一个服务,通常是服务类本身。

我们可以在模块或组件中注册提供商。

通常会把提供商添加到根模块上,以便在任何地方使用服务的同一个实例。

app/app.module.ts (module providers)

COPY CODE
providers: [
  BackendService,
  HeroService,
  Logger
],

或者,也可以在@Component元数据中的providers属性中把它注册在组件层:

app/hero-list.component.ts (component providers)

COPY CODE
@Component({
  moduleId: module.id,
  selector:    'hero-list',
  templateUrl: 'hero-list.component.html',
  providers:  [ HeroService ]
})

把它注册在组件级表示该组件的每一个新实例都会有一个服务的新实例。

需要记住的关于依赖注入的要点是:

  • 依赖注入渗透在整个 Angular 框架中,被到处使用。

  • 注入器 (injector) 是本机制的核心。

    • 注入器负责维护一个容器,用于存放它创建过的服务实例。

    • 注入器能使用提供商创建一个新的服务实例。

  • 提供商是一个用于创建服务的配方。

  • 提供商注册到注入器。

你可能感兴趣的:(angular2.0)