一个例子比一个冗长的解释更好:
// 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();
/* ... */
}
}
个字符
我怎样才能替换BakeryService.myStaticMethodToGetPrice()
来使用依赖注入,这样我就可以很容易地进行测试了?
4条答案
按热度按时间edqdpe6u1#
静态方法不能使用依赖注入。这是因为依赖注入的想法(至少对Nest来说)是注入依赖的示例,以便以后可以利用它们。
您拥有的代码是有效的,因为它将返回值
1
,就像静态方法说的那样,但是静态方法不能使用任何注入的示例值。您会发现这种逻辑在大多数其他DI框架中都遵循。de90aj5v2#
有一种非常简单的方法可以创建使用NestJs DI中的服务的静态函数。
一个很好的例子是使用域事件和避免使用技术服务污染实体的构造函数。
在你的主.ts
字符串
从应用内的任何静态上下文:
型
1cklez4t3#
我用静态属性和
@Inject()
解决了这个问题字符串
x0fgdtte4#
我是这样做的:
字符串
在main.ts中:
型
那么你需要这些装饰器:
型
最后,在静态方法中:
型