提供函数究竟是什么作为参数?

时间:2016-02-25 01:18:13

标签: javascript dependency-injection angular

我正在阅读关于角度2 DI的article,并且很难理解提供函数作为参数的含义。

  

我们有一个函数provide(),它将令牌映射到配置   宾语。令牌可以是类型或字符串。我们提供   Car类的Car实例。

import {provide} from 'angular2/core';

var injector = Injector.resolveAndCreate([
  provide(Car, {useClass: Car})
]);

我的问题是:

  1. 什么是令牌以及它的工作是什么?
  2. 类型实例和类之间有什么区别?

1 个答案:

答案 0 :(得分:2)

如果没有provide,则提供程序只是一种类型,如果请求,则会注入此类型的实例。

提供允许映射请求的类型或另一种令牌(字符串,OpaqueToken)以映射到另一种类型或具体值。

因此第一个参数是类型或标记。

  • useClass provide(XHRBackend, {useClass: MockBackend}
    如果构造函数请求XHRBackend(如Http那样)传入MockBackend

  • 的实例
  • useExisting provide(XHRBackend, {useExisting: MockBackend}
    如果构造函数请求XHRBackend从DI请求MockBackend实例并传递它。

  • useValue provide(XHRBackend, {useValue: someMockBackendReference}
    如果构造函数请求XHRBackend传递someMockBackendReference引用的值。这对于将配置值传递给消费者很方便 有关示例,请参阅Share services between multiple boostrapped component

  • useFactory允许DI提供类实例,DI无法自行创建。例如,如果一个类具有构造函数参数,但它没有使用@Injectable()注释,或者该参数没有类型,并且您无法自己添加它,因为该类来自其他人维护的库。 / p>

provide(XHRBackend, {
    useFactory: (options:BaseRequestOptions) => {
        return new BaseRequestOptions(5);
    },
    deps: [ObservableDataService]
});  

有关DI的更多信息,请参阅https://angular.io/docs/ts/latest/guide/dependency-injection.html

<强>更新

1)什么是令牌及其作用是什么?

令牌是一个字符串或OpaqueToken,它允许标识不具有不同类型的值。这允许您提供和注入不同类型的字符串和数字,例如无法通过类型区分。

2)类型实例和类之间有什么区别?

类的实例是执行new SomeClass()时在运行时获得的值。它是一个由类构建的值,其中类是值布局的模板,执行构造函数以初始化值。

值的类型是对其构建类的引用。