Angular 依赖注入里factory函数的调用时机

75 阅读1分钟

我们调用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的原创文章,尽在:“汪子熙”: