导入InjectionToken:
import {InjectionToken} from '@angular/core';
调用从@Angular/core导入的构造器,创建一个新的实例:
export const TOKEN_HOST_CLASS_PROVIDER = new InjectionToken<HostTokenComponentService>('TOKEN_HOST_CLASS_PROVIDER');
Injection构造器的实现:
export declare class InjectionToken<T> {
protected _desc: string;
readonly ɵprov: never | undefined;
constructor(_desc: string, options?: {
providedIn?: Type<any> | 'root' | 'platform' | 'any' | null;
factory: () => T;
});
toString(): string;
}
Component构造器里的定义:
providers: [
HostComponentService,
{provide: TOKEN_HOST_CLASS_PROVIDER, useClass: HostTokenComponentService}
]
在Component 构造函数里进行注入:
export class HostDecoratorComponent {
constructor(private hostComponentService: HostComponentService, @Inject(TOKEN_HOST_CLASS_PROVIDER) h){
console.log('in HostDecoratorComponent, Host component service got from own Injector: ', hostComponentService, ' HostTokenComponentService: ', h);
h.print();
}
最后运行结果:
调用InjectionToken构造器,options的值为undefined:
更多Jerry的原创文章,尽在:“汪子熙”: