javascript - Injektion med hjälp av en InjectionToken?


Försöker injicera ett objekt med hjälp av en InjectionToken.

I AppModule har jag:

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

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

Och i AppComponent:

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

Detta är ett komplett stacblitz-exempel

Injektion med strängnyckeln fungerar, men injektion med token misslyckas. Några idéer varför?

Artikel

Här är en artikel ifall någon vill leka med detta

Svar #1

Ett cirkulärt beroendeproblem kan finnas på grund av att AppModule importerar AppComponent och AppComponent importerar InjectionToken från AppModule.

Att flytta token till separat löser problemet:

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);
  }

Relaterade artiklar