我可以使用 nestjs 注入接口而不是 类 吗?
Can I use nestjs inject with interfaces instead of classes?
我想使用这样的东西:
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]
但是收到
Nest can't resolve dependencies of the
您可以使用@Inject('ICats')
,但是您必须向 DI 容器注册该注入令牌。为此,您可以像这样使用 custom provider:
@Module({
providers: [
{
provide: 'ICats',
useClass: CatsService
}
],
exports: ['ICats'],
})
export class CatsModule {}
接口本身是不够的,因为没有关于它们的元数据,就像 类 一样。没有这些元数据,Nest 将不知道要注入什么,这就是为什么我们必须使用手册 @Inject()
我想使用这样的东西:
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]
但是收到
Nest can't resolve dependencies of the
您可以使用@Inject('ICats')
,但是您必须向 DI 容器注册该注入令牌。为此,您可以像这样使用 custom provider:
@Module({
providers: [
{
provide: 'ICats',
useClass: CatsService
}
],
exports: ['ICats'],
})
export class CatsModule {}
接口本身是不够的,因为没有关于它们的元数据,就像 类 一样。没有这些元数据,Nest 将不知道要注入什么,这就是为什么我们必须使用手册 @Inject()