我们调用InjectionToken构造器,创建一个新的InjectionToken实例时,除了传入一个字符串作为description,还可以指定一个options结构:
const MY_SERVICE_TOKEN = new InjectionToken<MyService>('Manually constructed MyService', {
providedIn: 'root',
factory: () => {
console.log('MyService factory called');
return new MyService();
}
});
该options里可以指定一个factory函数,在里面实现条件式的被依赖实例注入逻辑。
constructor(private hostComponentService: HostComponentService, @Inject(TOKEN_HOST_CLASS_PROVIDER) h,
@Inject(MY_SERVICE_TOKEN) hh){
console.log('in HostDecoratorComponent, Host component service got from own Injector: ', hostComponentService, ' HostTokenComponentService: ', h);
h.print();
const BASE_URL = new InjectionToken<string>('只是描述');
const injector =
Injector.create({providers: [{provide: BASE_URL, useValue: 'http://localhost'}]});
const url = injector.get(BASE_URL);
console.log(url);
}
更多Jerry的原创文章,尽在:“汪子熙”: