在 inversifyjs 中重置作用域容器

2023-12-30

我正在实现一个范围容器架构,这样一个新的container为每个 Express 请求(或 apollographql 请求)创建。我有一个生命周期方法,可以在发送完响应后调用,这有利于清理和释放内存,并且该方法可以引用我们已完成服务的请求的上下文。在那里面context我有一个参考inversifyjs container我之前创建的,所以我可以参考它container在清理方法中,我怎样才能delete that container?

function ScopedContainer(userId: number) {
  const container = new Container();
  container.bind<number>(TYPES.userId).toConstantValue(userId);
  //rest of bindings container.bind ...
  return container;
}

async({req, res}) => {
  const { headers } = req;
  const { userId } = headers;
  const container = ScopedContainer(clientId);
  const context = { container }
  ///...
}

willSendResponse(({container}) => {
  // how to instruct inversifyjs to ditch all references to container?
  // something like container.destroy?
});


我想确保这一点containerhttp请求完成后不会停留在那里,导致巨大的内存泄漏。问题是我不确定当引用计数达到零时它是否会被垃圾收集。我也在用lazyInject from inversify-inject-decorators

有没有inversifyjs containerAPI之类的销毁或重置方法?


inversify lib 中没有对容器实例的持久引用。暂时参考Context in _planAndResolve私有方法,但在返回时会被释放,所以不用担心。

从概念上讲,容器实例应该是顶级解析器。系统中的所有其他服务都由容器“拥有”,但除了用户态代码之外,任何人都不应拥有容器。

简而言之,只要您遵守规则:只使用container在你的作文根中, 像inversify.config.ts, 你安全了。

在您的示例中,不太明显有多少其他实体持有container参考。如果这只是context您传递快速中间件的对象,然后一旦请求处理完成,context被取消引用,也是如此container等待GC。无需进一步“清理”。

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

在 inversifyjs 中重置作用域容器 的相关文章

  • 调整添加的绘制组件的大小和奇怪的摆动行为

    这个问题困扰了我好几天 我正在制作一个特殊的绘画程序 我制作了一个 JPanel 并添加了使用 Paint 方法绘制的自定义 jComponent 问题是 每当我调整窗口大小时 所有添加的组件都会 消失 或者只是不绘制 因此我最终会得到一个
  • 在 RESTful Web 服务中实现注销

    我正在开发一个需要注销服务的移动应用程序 登录服务是通过数据库验证来完成的 现在我陷入了注销状态 退一步 您没有提供有关如何在应用程序中执行身份验证的详细信息 并且很难猜测您在做什么 但是 需要注意的是 在 REST 应用程序中 不能有会话
  • Antlr 解析器运算符优先级

    考虑以下语法 我对运算符优先级有疑问 例如 res 2 a b有一个类似的解析树res 2 a b 我知道问题出在哪里 但我没有想到没有相互左递归的 漂亮 解决方案 你能帮我一点忙吗 该语法与自定义访问者一起使用 grammar Math
  • 如何通过索引访问 JSON 对象中的字段

    我知道这不是最好的方法 但我别无选择 我必须通过索引访问 JSONObject 中的项目 访问对象的标准方法是只写this objectName or this objectName 我还找到了一种获取 json 对象内所有字段的方法 fo
  • 带有 Maven Wrapper 的 Java 17 导致无法识别的 VM 选项“MaxPermSize=512m”

    I use OpenJDK 17 https jdk java net 17 使用 Maven Wrapper 3 8 2 从春季初始化 https start spring io Maven项目 JAR打包 Java 17 Spring
  • 测量窗口偏移

    有没有一种方法可以测量 jQuery 中窗口的偏移量 以便我可以比较 固定 元素和相对定位元素的位置 我需要能够知道窗口滚动了多远 以便我可以使用该图来计算固定元素的高度 相对于视口顶部 和相对对象的高度 相对于顶部 之间的差异文件的内容
  • MySQL 查询计算上个月

    我想计算上个月的订单总额 我收到了从当前日期获取当月数据的查询 SELECT SUM goods total AS Total Amount FROM orders WHERE order placed date gt date sub c
  • 没有输入的 jQuery 日期选择器

    我有一个相当复杂的网络应用程序 我想向其中添加一些日期选择 UI 我遇到的问题是我无法从文档中弄清楚如何真正控制日期选择器的出现方式和时间 不涉及任何表单元素 不 我不会添加秘密表单字段 因此简单的开箱即用方法根本行不通 我希望有人可以提供
  • 类型或命名空间“MyNamespace”不存在等

    我有通常的类型或命名空间名称不存在错误 除了我引用了程序集 using 语句没有显示为不正确 并且我引用的类是公共的 事实上 我在不同的解决方案中引用并使用相同的程序集来执行相同的操作 并且效果很好 顺便说一句 这是VS2010 有人有什么
  • Mono 应用程序在非阻塞套接字发送时冻结

    我在 debian 9 上的 mono 下运行一个服务器应用程序 大约有 1000 2000 个客户端连接 并且应用程序经常冻结 CPU 使用率达到 100 我执行 kill QUIT pid 来获取线程堆栈转储 但它总是卡在这个位置
  • php 数组中出现意外的 json 输出结构

    我正在尝试转换动态数据 如何从 PHP 获取此 JSON JSON 122240cb 253c 4046 adcd ae81266709a6 item 0 3 这就是我所做的 但它不起作用 PHP json array 122240cb 2
  • 一种无需 JavaScript 即可在 PHP 中确定浏览器宽度的方法?

    首先有吗 或者我必须使用javascript 我希望能够更改使用的 CSS 因此 frex 我可以为移动设备或其他设备加载较小的字体 不幸的是 仅使用 PHP 无法检测用户分辨率 如果您使用 Javascript 则可以在 cookie 中
  • GUI Java 程序 - 绘图程序

    我一直试图找出我的代码有什么问题 这个想法是创建一个小的 Paint 程序并具有红色 绿色 蓝色和透明按钮 我拥有我能想到的让它工作的一切 但无法弄清楚代码有什么问题 该程序打开 然后立即关闭 import java awt import
  • 从 mvc 控制器使用 Web api 控制器操作

    我有两个控制器 一个mvc控制器和一个api控制器 它们都在同一个项目中 HomeController Controller DataController ApiController 如果我想从 HomeController 中使用 Dat
  • 使用velocity.js制作可拖动元素的动画

    我正在使用velocity js 为用户拖动的可拖动 SVG 元素设置动画 然而 velocity js 将先前的 mousemove 坐标排队并通过所有后续的 mousemove 坐标进行动画处理 我想要的是velocity js 不要对
  • 如何确定 CultureInfo 实例是否支持拉丁字符

    是否可以确定是否CultureInfo http msdn microsoft com en us library system globalization cultureinfo aspx我正在使用的实例是否基于拉丁字符集 我相信你可以使
  • 如何在 OSX 上安装 LaTeX .sty 文件?

    我设置了一个 LaTeX 项目 tex documents some file tex support todonotes sty where some file tex uses todonotes usepackage colorinl
  • 使用 WGL 创建现代 OpenGL 上下文?

    我正在尝试使用 Windows 函数创建 OpenGL 上下文 现代版本 基本上代码就是 创建窗口类 注册班级 创建一个窗口 choose PIXELFORMATDESCRIPTOR并设置它 创建旧版 OpenGL 上下文 使上下文成为当前
  • 禁用允许文本选择的

    残疾人可以吗
  • PyAudio ErrNo 输入溢出 -9981

    我遇到了与用户相同的错误 Python 使用 Pyaudio 以 16000Hz 录制音频时出错 https stackoverflow com questions 12994981 python error audio recording

随机推荐

  • TabLayout 文本重力

    我想在我的选项卡布局中设置文本的重力来开始 但我找不到任何有效的解决方案 下图显示了我想要实现的设计 下图显示了我的实际结果 My Code
  • 我可以从具有许多编译器标志的 C 程序中导出使用的代码吗?

    我想将您的 Linux 驱动程序代码压缩为仅在当前内核上运行的代码 它有一些被 if 语句忽略的部分 一直到内核 2 4 x 您是否听说过一种将代码编译为输出的方法 该输出将成为工作代码 而不会被 c 编译器 if else 语句忽略的所有
  • 将 MS Access 数据库导出到 SQL Server 2008 Express

    是否有一种简单的方法将 MS Access 数据库后端 表和关系 导出到 SQL Server 数据库 以便它可以用作使用实体框架用 C 编写的定制应用程序的后端 Access 数据库至少包含 50 个表 导出不应破坏其结构和关系 Micr
  • 如何在 Visual Studio C++ 2010 中将 BSTR 转换为 std::string?

    我正在研究 COM dll 我希望将 BSTR 转换为 std string 以传递给采用 const 引用参数的方法 看来使用 com util ConvertBSTRToString 来获取 BSTR 的 char 等效项是一种合适的方
  • 如何获取今天在 git 中提交的总行数?

    我发现了仓库存在以来 git 的一般统计数据 但我有兴趣做类似的事情 git today 并获取按作者细分的提交数 行数等内容 我最感兴趣的是当前用户的行数 我可以自己结合其他事情的结果 如果您想查看 git 存储库活动的图形表示 请使用g
  • 使用 PDFBox 从 PDF 文档中读取特定页面

    如何使用 PDFBox 从 PDF 文档中读取特定页面 给定页码 这应该有效 PDPage firstPage PDPage doc getAllPages get 0 如中所见教程的书签部分 http pdfbox apache org
  • 如何删除从网络服务返回的无法识别的字符?

    我正在开发一个调用休息网络服务的应用程序 有时 xml 响应包含电话无法显示的字符 显示这些字符时 会显示一个空框 我想过滤掉这些字符 如何检测某个字符是否能够显示在屏幕上 一些具体字符包括 http www fileformat info
  • iPhone Obj C -- 对可变字典数组进行排序 -- 显示字符串但按值排序

    我有一个 NSMutableArray 里面有 30 个字典 每个都包含一个名称和一个值 我目前已对名称进行排序 以便按字母顺序显示在表格视图中 但是 我想制作一个 UIButton 来提供仍然显示名称的选项 但按值排序 该值不需要显示 另
  • 从 TCP 套接字解析 XML 流

    我编写了一个 Ruby 脚本来通过 TCP 套接字连接到 XML 流 我想使用 LibXML 解析此 XML 流 我的问题是我不知道如何将此流传递给 LibXML 来自 LibXML 文档XML Document io io http li
  • 如何并排显示两个 Markdown 代码块

    我想并排显示源代码的两个块 重构之前和之后 是否可以并排创建两个代码块 如果不是那么替代解决方案是什么 无法使用纯 Markdown 语法在单个表格单元格中创建多行代码块 但您可以使用逐字 HTML 来完成此操作 下面是一个带有并排代码的两
  • Matplotlib 子图:imshow + 绘图

    我想创建一个如下图所示的图 图中有两个独特的情节 img1是使用生成的plt imshow while img2是使用生成的plt plot 下面提供了我用来生成每个图的代码 plt clf plt imshow my matrix plt
  • 带有输入组的引导面板

    我想做的是有一个引导面板 其左侧有一个按钮 右侧有一个按钮 有点像输入组 我希望这是有意义的 请原谅我的绘画技巧 但我想我应该附上一个例子来说明我的意思 面板可能不是最好的选择 所以如果有任何其他建议 请随时告诉我 Thanks 尝试这个c
  • MSBuild 和 TeamBuild - BuildInParallel 由于 MSB3021 文件权限冲突而失败

    我维护着一个相当大的软件的构建 其中包含大约 350 个 csharp 项目 我们的调试构建时间约为 17 分钟 我一直在寻找缩短构建时间的方法 BuildInParallel 属性确实看起来很有趣 特别是因为我们有一个四核服务器来进行构建
  • cordova - 多个 dex 文件定义 Lcom/google/android/gms/iid/zzc

    我正在尝试编译适用于 Android 的 cordova 应用程序 但收到此错误 有任何想法吗 这是我收到的错误 FAILURE Build failed with an exception What went wrong Executio
  • 如何对多态向量中包含的元素进行拆箱?

    看完之后这是 属于特征的对象的向量 的答案 https stackoverflow com a 25819164 129805 看起来 Rust 会自动拆箱 是这样吗 我的代码无法编译 我不明白该答案的代码如何编译 对包含装箱特征的多态向量
  • 如何查看Boto3 HTTPS请求字符串

    我已经能够查看 botocore 发送的PreparedRequest 的属性 但我想知道如何查看发送到AWS 的确切请求字符串 我需要确切的请求字符串才能将其与我正在测试 AWS 调用的另一个应用程序进行比较 您还可以在 boto3 中启
  • 如何组合和验证 swt 对话框的两个文本字段?

    我有另一个问题 我使用一个文本字段的修改侦听器来激活和停用 swt 对话框中的 确定 按钮 效果很好 现在我想为另一个文本字段添加修改侦听器 我希望仅当两个文本字段中都至少有一个字符时才激活 确定 按钮 这是两个字段的代码 descript
  • 如何验证 ADFS SAML 令牌

    我目前正在从 ADFS 生成 SAML 令牌 如下所示 WSTrustChannelFactory factory null try use a UserName Trust Binding for username authenticat
  • 如何在 Heroku 上使用 Datomic Pro?

    我想在 Heroku 上使用 Datomic Pro 目前为入门版 但我不想将我的下载密钥提交到 Git 中 相反 正确的做法似乎是将其存储在环境变量中 这意味着我的project clj现在包含 dependencies org cloj
  • 在 inversifyjs 中重置作用域容器

    我正在实现一个范围容器架构 这样一个新的container为每个 Express 请求 或 apollographql 请求 创建 我有一个生命周期方法 可以在发送完响应后调用 这有利于清理和释放内存 并且该方法可以引用我们已完成服务的请求