首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在inversifyjs中重置作用域容器

在inversifyjs中重置作用域容器
EN

Stack Overflow用户
提问于 2020-12-28 03:26:17
回答 1查看 485关注 0票数 4

我正在实现一个作用域容器体系结构,以便为每个快捷请求(或apollographql请求)创建一个新的container。我有一个生命周期方法,可以在发送响应之后调用,这有利于清理和释放内存,而且这个方法可以引用我们服务的请求的上下文。在那个context中,我引用了我前面创建的inversifyjs container,这样我就可以在清理方法中引用container,如何才能delete that container

代码语言:javascript
复制
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?
});

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

是否有类似于破坏或重置方法的inversifyjs container API?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-26 10:44:10

在反版本库中没有对容器实例的持久引用。它暂时由Context_planAndResolve私有方法中引用,但在返回时发布,所以不用担心。

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

恩,只要您坚持规则:只在组合根中使用,就像在inversify.config.ts中一样,您是安全的。

在您的示例中,不太明显的是有多少其他实体持有container引用。如果您传递的只是context对象,那么一旦完成请求处理,context就会被删除,container也会等待成为GC。没有必要做进一步的“清理”。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65472688

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档