Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 有没有一种方法可以在NestJS中使用依赖项注入的静态方法?_Javascript_Node.js_Dependency Injection_Nestjs - Fatal编程技术网

Javascript 有没有一种方法可以在NestJS中使用依赖项注入的静态方法?

Javascript 有没有一种方法可以在NestJS中使用依赖项注入的静态方法?,javascript,node.js,dependency-injection,nestjs,Javascript,Node.js,Dependency Injection,Nestjs,一个例子比一个冗长的解释更好: // 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 Backe

一个例子比一个冗长的解释更好:

// 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.service.ts
从'@nestjs/common'导入{Injectable};
从'@nestjs/typeorm'导入{InjectRepository};
从“typeorm”导入{Repository};
从“./Backery.entity”导入{Backery};
@可注射()
导出类后台服务{
建造师(
@注入存储库(Backery)
专用只读backeryRepository:Repository,
) {}
静态myStaticMethodToGetPrice(){
返回1;
}
其他方法(){
this.backeryRepository.find();
/* ... */
}
}
//Backery.resolver.ts
从“./Bakery.entity”导入{Bakery};
从“./Bakery.service”导入{BakeryService};
@分解器(()=>面包房)
出口级面包机{
构造函数(){}
@ResolveField('价格',()=>数字)
异步getPrice():承诺{
return BakeryService.myStaticMethodToGetPrice();//此处没有依赖项注入:(
}
}

我如何替换BakeryService.myStaticMethodToggetprice()来使用依赖注入,这样我就可以轻松地进行测试,例如?

静态方法不能使用依赖注入。这是因为依赖注入的思想(至少是嵌套)是注入依赖项的实例,以便以后可以利用它们


您拥有的代码是有效的,因为它将返回值
1
,就像静态方法所说的那样,但是静态方法不能使用任何注入的实例值。您会发现这种逻辑在大多数其他DI框架中都遵循。

静态方法不能使用依赖注入。这是因为dependenc的思想y注入(至少是嵌套)是注入依赖项的实例,以便以后可以利用它们


您拥有的代码是有效的,因为它会像静态方法所说的那样返回值
1
,但是静态方法不能使用任何注入的实例值。您会发现在大多数其他DI框架中都遵循这种逻辑。

您希望这是一个静态方法,有什么特别的原因吗?换句话说,为什么你能不能在你的
BakeryResolver
中注入
BakeryService
并调用服务实例上的price方法?@eol该方法不使用
this
,因此使其成为静态的感觉更自然,因为它不依赖于对象实例。你希望它成为静态的方法有什么特别的原因吗n换句话说,为什么您不能在
BakeryResolver
中插入
BakeryService
,并在服务实例上调用price方法?@eol该方法不使用
this
,因此将其设为静态更为自然,因为它不依赖于对象实例。该代码有效,但它是官方推荐的吗ion?或者为了使用DI和简化测试,最好完全避免使用静态方法?对于动态模块,我喜欢避免使用静态**,除了**。此代码是有效的,但这是官方建议吗?或者为了使用DI和简化测试,最好完全避免使用静态方法?我喜欢避免使用静态**,除了**wh它涉及到动态模块。
// 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 :(
  }
}