【发布时间】:2021-04-27 02:03:29
【问题描述】:
一个例子胜于冗长的解释:
// Backery.service.ts
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { Backery } from './Backery.entity';
@Injectable()
export class BackeryService {
constructor(
@InjectRepository(Backery)
private readonly backeryRepository: Repository<Backery>,
) {}
static myStaticMethodToGetPrice() {
return 1;
}
otherMethod() {
this.backeryRepository.find();
/* ... */
}
}
// Backery.resolver.ts
import { Bakery } from './Bakery.entity';
import { BakeryService } from './Bakery.service';
@Resolver(() => Bakery)
export class BakeryResolver {
constructor() {}
@ResolveField('price', () => Number)
async getPrice(): Promise<number> {
return BakeryService.myStaticMethodToGetPrice(); // No dependency injection here :(
}
}
如何替换BakeryService.myStaticMethodToGetPrice() 以使用依赖注入,以便我可以轻松地进行测试?
【问题讨论】:
-
您希望这是一个静态方法有什么特别的原因吗?换句话说,你为什么不能在你的
BakeryResolver中注入BakeryService并在服务实例上调用price 方法? -
@eol 该方法不使用
this,因此将其设置为静态感觉更自然,因为它不依赖于对象实例。
标签: javascript node.js dependency-injection nestjs