了解 Nest 中的 Inject、Injectable 和 InjectRepository

2024-02-06

我来自非打字稿和非巢背景。我正在检查代码,发现了这段代码片段

import { Inject, Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { AreaService } from '../area/-area.service';
import { Repository } from 'typeorm';
import { Office } from './office.entity';
import { OfficeInterface } from './office.interface';

@Injectable()
export class OfficeService {
  constructor(
    @Inject(AreaService)
    private readonly AreaService: AreaService,
    @InjectRepository(Office)
    private readonly OfficeRepository: Repository<Office>,
  ) {}

老实说,现在这对我来说是压倒性的。我去了嵌套 JS 页面 https://docs.nestjs.com/fundamentals/injection-scopes了解他们要说的这个和这个

对于来自不同编程语言背景的人来说 可能会出乎意料地发现,在 Nest 中,几乎所有内容都是共享的 跨传入请求。我们有一个到数据库的连接池, 具有全局状态的单例服务等。请记住 Node.js 不遵循请求/响应多线程无状态模型 每个请求都由单独的线程处理。因此,使用 单例实例对于我们的应用程序来说是完全安全的

他们在上面的声明中是否意味着他们将所有内容添加到请求对象中nestJS?

import { Injectable, Scope } from '@nestjs/common';

@Injectable({ scope: Scope.REQUEST })
export class CatsService {}

Specify injection scope by passing the scope property to the @Injectable() decorator options object:

所以如果我们这样做@Injectable()它的范围有多大?

有人可以解释一下两者之间的区别吗@Injectable(), @Inject(AreaService) and @InjectRepository(Office)以及何时、应该使用哪一个?


回答您的问题REQUEST-scope:

@Injectable({ scope: Scope.REQUEST })
export class CatsService {}

这意味着对于由 a 处理的每个请求Controller这取决于CatsService的一个新实例CatsService将被创建。这也意味着依赖于任何其他服务/控制器CatService会变成REQUEST-范围,即使它们是使用默认(即单例)范围定义的。这是一件需要记住的重要事情,因为它可能会对您的应用程序产生影响,请参阅this https://docs.nestjs.com/fundamentals/injection-scopes#performance and that https://github.com/nestjs/nest/issues/2524#issuecomment-509311552了解更多信息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

了解 Nest 中的 Inject、Injectable 和 InjectRepository 的相关文章

随机推荐

  • 如何在Eclipse控制台打印[简体]汉字?

    我有以下代码 import java io PrintStream import java io UnsupportedEncodingException import java util Locale public final class
  • 点击刷新时,IIS 上出现路由 404 错误

    我没有找到这个问题的解决方案 但我已经尝试了各种解决方案 但没有任何效果 我有一个 React JS 应用程序 当部署在测试服务器上并且您在页面上点击刷新时 我收到 404 错误消息 我尝试过 URL 重写 这有助于导航回主页 但这并不能解
  • 如何使 DateTime 独立于当前文化?

    我尝试将日期时间转换为字符串并返回 但使其适用于所有文化 我基本上有一个文本框 tbDateTime 和一个标签 lbDateTime 该标签告诉用户 软件期望以哪种格式输入 tbDateTime 文本框的输入将用于 MySQL 命令 目前
  • Angular ng 使用不同的“配置文件”构建

    在 Maven Java 中 可以构建具有不同 配置文件 的 Web 应用程序战争 配置文件 指示例如要放入配置文件中的 Web 服务的 URL 因此 测试配置文件 将指示与 生产配置文件 不同的 URL 有没有类似于 ng build 的
  • Swift - 如何在单击时使图像全屏显示,然后在再次单击时使图像变为原始大小? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 对于我正在制作的应用程序 我希望用户能够单击图像以使其在应用程序上全屏显示 然后用户可以单击现在的全屏图像以使其恢复原始大小 这可能吗
  • 我不明白 format() 和 ... (python) 之间有什么区别

    这里是困惑的新手 使用有什么区别 print So you are 0 years old format age AND print So you are age years old 两者都有效 其实差别很大 前者使用字符串format h
  • 汇编中的纯高位乘法?

    为了实现 0 到 1 之间的实数 通常使用 ANSI 浮点数或双精度数 但是 0 到 1 之间的固定精度数字 小数模 1 可以有效地实现为 32 位整数或 16 位字 它们像普通整数 字一样相加 但乘以 错误的方式 这意味着当您乘以 X 倍
  • gem 服务器:如何更新缺少 rdoc 的 gem?

    我很喜欢gem server使用本地 RubyGems 文档索引引导 Web 服务器的命令 我唯一的问题是 有些 gems 没有 rdoc 文件 如何添加缺失的rdoc 所有gem都是主流gem 不是我自己的 通过Bundler安装 导轨2
  • 电子生成器应用程序大小太大

    我发现使用 Electron builder 生成的 MyApp exe 文件有将近 500M 左右 我不确定我做了什么 因为以前 仅对于 ia32 或 x64 它大约是 196M 我也看了这个link https stackoverflo
  • 矢量上的段错误

    我创建了一个结构来保存一些数据 然后声明一个向量来保存该结构 但是当我执行 Push back 时 我遇到了该死的段错误 我不知道为什么 我的结构定义为 typedef struct Group int codigo string name
  • 查找最大值并显示 SQL Server 中不同字段的相应值

    我有一个表 其中包含有关城市的数据 其中包括城市名称 人口和与我的问题无关的其他字段 ID Name Population 1 A 45667 2 B 123456 3 C 3005 4 D 13769 找到最大人口是基本的 但我需要一个结
  • python 在 x 轴上旋转值以不重叠

    I m having some problems with the xticks of the graph here 有人可以帮忙吗 我尝试了他们在这里所做的事情 matplotlib 中的日期刻度和旋转 https stackoverfl
  • 如何设置 Facebook 分享图片(仅作为后备)?

    我们当然可以使用以下命令来设置默认共享图像 但是 有没有办法将其设置为仅后备 而不是默认值 这意味着 只有当 Facebook 无法从博客文章中找到更大 更合适的图像时才可以使用 注意 Facebook 已经自动自行抓取 无需网站所有者的任
  • tensorflow-gpu 无法与 Blas GEMM 一起使用 启动失败

    我安装了tensorflow gpu 以在GPU 上运行我的tensorflow 代码 但我无法让它运行 它不断给出上述错误 以下是我的示例代码 后面是错误堆栈跟踪 import tensorflow as tf import numpy
  • Django 不允许的主机

    我刚刚开始第一次接触 Django 所以我创建一个 django 项目并运行命令 python3 manage py runserver 0 0 0 0 8000 我没有得到预期的 django 主页 而是收到以下错误消息 Disallow
  • 未使用模板专业化

    我定义了以下函数 template
  • Swift 中有多少种编写闭包的方法?

    问题 在 swift 中编写任何闭包时需要考虑哪些基本规则和边界 就语法而言 闭包有多种类型 我们可以使用带有 void return 单参数返回和多返回类型的闭包 我们可以用inout typealaise escaping autocl
  • 正确使用 JavaScript 接口关键字

    首先 不 我并不想为我的 JavaScript 代码创建任何类似 Java 的接口 我到处都见过这些问题 虽然我对 JavaScript 来说还是个相对新手 但我知道这些不是该语言的一部分 不过 我很好奇它的实际用途是什么interface
  • Inno Setup:如果程序文件夹中存在文件,则关闭安装程序向导

    我正在尝试创建一个演示安装程序 如果它检测到该文件close txt在程序文件夹中 然后它会关闭向导或中止安装 我正在运行一个计划任务 该任务会在两天后自动卸载该应用程序 初次安装时close txt文件安装在程序文件夹中 然后自动卸载后c
  • 了解 Nest 中的 Inject、Injectable 和 InjectRepository

    我来自非打字稿和非巢背景 我正在检查代码 发现了这段代码片段 import Inject Injectable from nestjs common import InjectRepository from nestjs typeorm i