非常教程

Nest参考手册

基本内容

循环依赖

例如,当A类需要B类时,循环依赖性发生,而B类也需要A类。Nest允许在提供者和模块之间创建循环依赖关系,但我们建议您尽可能避免。有时候很难避免这种关系,这就是为什么我们提供了一些方法来处理这个问题。

前向参考

向前参考允许巢指未到目前为止定义引用。当彼此依赖CatsService并且CommonService相互依赖时,关系的两侧都需要使用@Inject()forwardRef()实用程序,否则Nest将不会实例化它们,因为所有必需的元数据都不可用。我们来看看以下代码段:

cats.service.ts

JS

@Injectable()
export class CatsService {
  constructor(
    @Inject(forwardRef(() => CommonService))
    private readonly commonService: CommonService,
  ) {}
}

提示forwardRef()功能从@nestjs/common包中导入。

这是这段关系的第一面。现在让我们做同样的事情CommonService

common.service.ts

JS

@Injectable()
export class CommonService {
  constructor(
    @Inject(forwardRef(() => CatsService))
    private readonly catsService: CatsService,
  ) {}
}

警告您无法保证首先调用哪个构造函数。

为了在模块之间创建循环依赖关系,您必须forwardRef()在模块关联的两个部分上使用相同的实用程序:

common.module.ts

JS

@Module({
  imports: [forwardRef(() => CatsModule)],
})
export class CommonModule {}

模块参考

Nest提供了ModuleRef可以简单地注入任何组件的类。

cats.service.ts

JS

@Injectable()
export class CatsService implements OnModuleInit {
  private service: Service;
  constructor(private readonly moduleRef: ModuleRef) {}

  onModuleInit() {
    this.service = this.moduleRef.get(Service);
  }
}

提示ModuleRef类是从进口@nestjs/core包。

模块引用有一个get()方法,允许检索当前模块中可用的提供程序。此外,您可以切换到非严格模式,这样您就可以在整个应用程序中选择任何现有的提供程序。

Nest

Nest 是一个用于构建高效,可扩展的 Node.js 服务器端应用程序的框架

Nest目录

1.介绍
2.常见问题
3.CLI
4.方法
5.执行上下文
6.微服务
7.WEBSOCKETS
8.GRAPHQL
9.技术
10.基本内容
11.迁移指南