也就是依赖不是一个类,而是对象
// 默认只能用类(无法用接口)作为provider的令牌,不能用值,这里演示了如何用值作为令牌
import { InjectionToken } from '@angular/core';
// 创建要依赖的对象
export const HERO_DI_CONFIG: AppConfig = {
apiEndpoint: 'api.heroes.com',
title: 'Dependency Injection'
};
// 创建一个令牌,类型参数虽然是可选的,但可以向开发者和开发工具传达类型信息。
export const APP_CONFIG = new InjectionToken<AppConfig>('app.config');
// 然后就可以在module里这样配置,使用useValue
providers: [{ provide: APP_CONFIG, useValue: HERO_DI_CONFIG }]
// 因为不是类型而是对象,所以在@Inject装饰器的帮助下使用
constructor(@Inject(APP_CONFIG) config: AppConfig) {
this.title = config.title;
}