Инъекция с использованием InjectionToken? - PullRequest
0 голосов
/ 15 февраля 2019

Попытка ввести объект с помощью InjectionToken.

В AppModule у меня есть:

    export const tokenConfigKey = new InjectionToken('config');

    const tokenBasedConfig = {
        provide: tokenConfigKey,
        useValue: {
          key: 'value'
      }
    }

И в AppComponent:

    @Component({
      selector: 'my-app',
      template:`<h1>Hello Angular Lovers!</h1>`
    })
    export class AppComponent  {
      constructor(@Inject('config') config,
                  @Inject(tokenConfigKey) configByToken) {
      }
    }

Это полный пример сценария

Инжекция с использованием строкового ключа проходит, но инъекция с токеном не удалась.Есть идеи почему?

Статья

Вот статья на случай, если кто-то захочет поиграть с этим

1 Ответ

0 голосов
/ 15 февраля 2019

Может существовать проблема циклической зависимости из-за того, что AppModule импортирует AppComponent, а AppComponent импортирует InjectionToken из AppModule.

Перемещение токена в отдельные разделы решает проблему:

token.ts

import { InjectionToken } from '@angular/core';
export const BASE_URL = new InjectionToken<string>('BaseUrl');

app.module.ts

@NgModule({
  providers: [{ provide: BASE_URL, useValue: { key: 'http://localhost' } }],

app.component.ts

 constructor(@Inject(BASE_URL) configByToken) {
    console.log(configByToken);
  }
...