我正在阅读关于角度2 DI的article,并且很难理解提供函数作为参数的含义。
我们有一个函数provide(),它将令牌映射到配置 宾语。令牌可以是类型或字符串。我们提供 Car类的Car实例。
import {provide} from 'angular2/core';
var injector = Injector.resolveAndCreate([
provide(Car, {useClass: Car})
]);
我的问题是:
答案 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()
时在运行时获得的值。它是一个由类构建的值,其中类是值布局的模板,执行构造函数以初始化值。
值的类型是对其构建类的引用。