typescript - Môžem použiť nestjs inject s rozhraniami namiesto tried?
Chcem použiť niečo takéto:
cats.interface.ts
export interface ICats {
meow(): void
}
cats.service.ts
@Injectable()
export class CatsService implements ICats {
constructor()
meow(): void {
return;
}
}
cats.module.ts
@Module({
providers: [CatsService]
exports: [CatsService]
})
export class CatsModule {}
animals.service.ts
@Injectable()
export class AnimalsService {
constructor(@Inject('ICats') private readonly cats: ICats)
test(): void {
return this.cats.meow();
}
}
animals.module.ts
@Module({
imports: [CatsModule],
providers: [AnimalsService],
exports: [AnimalsService]
Ale dostanete Nest nemôže vyriešiť závislosti
Odpoveď č. 1
Môžete použiť @Inject('ICats'), ale musíte zaregistrovať tento injekčný token v DI kontejnere. Na to môžete použiť vlastného poskytovateľa takto:
@Module({
providers: [
{
provide: 'ICats',
useClass: CatsService
}
],
exports: ['ICats'],
})
export class CatsModule {}
Rozhrania samy o sebe nestačia, pretože neexistujú žiadne metaúdaje o nich, ako je tomu v prípade tried. Bez týchto metaúdajov Nest nebude vedieť, čo má injektovať, preto musíme použiť manuálne @Inject()
