0

彼らのドキュメントFactoryProviderでは、 ajs サービスをアップグレードするために次の例を使用しています。

import { HeroesService } from './heroes.service';

export function heroesServiceFactory(i: any) {
  return i.get('heroes');
}

export const heroesServiceProvider = {
  provide: HeroesService,
  useFactory: heroesServiceFactory,
  deps: ['$injector']
};

@NgModule({
  imports: [
    BrowserModule,
    UpgradeModule
  ],
  providers: [
    heroesServiceProvider
  ],
/* . . . */
})

InjectionToken代わりにこのようにしない理由があるので、それprovidersを使用する必要があるすべてのモジュールのリストに追加する必要はありませんか?

import { HeroesService } from './heroes.service';
import {inject, InjectionToken} from '@angular/core';
import {auto} from 'angular';

export const heroesServiceToken = new InjectionToken<HeroesService>('HeroesServices', {
  providedIn: 'root',
  factory() {
    const $injector = inject('$injector' as any) as auto.IInjectorService;
    const instance = $injector.get('heroes');
    return instance as HeroesService;
  }
});

...
import { HeroesService } from './heroes.service';
import {Inject} from '@angular/core';

class SomeComponent {
  constructor(@Inject(heroesServiceToken) private heroesService: HeroesService) {
  }
}
4

1 に答える 1