Castle Windsor 什么时候释放瞬态组件?

4

我来自于Java和Spring的背景,对于Castle Windsor还比较陌生。我了解到了解什么时候瞬态组件将被Castle释放很重要,因为它跟踪所有创建的组件。但是我很难理解我的组件何时会被释放。以下是我的模型基本信息:

Singleton -> Singleton Typed Factory -> Transient Objects

如果我释放这个链中的第一个单例,由typed factory创建的所有瞬态对象都会被释放吗?是否有任何API调用可以检查这种情况?我在Castle Windsor网站上找不到任何全面的API文档。我找到的文档似乎对我来说不清楚。
编辑: 我的问题归结为两个主要问题。 1.如果我有一个依赖于单例类型工厂(B)的单例对象(A),并释放单例A,那么它是否会释放B?下面回答中提到的博客文章说,对单例对象的释放调用将被忽略,因此我的假设是不会被释放。 2.如果我有一个单例类型的工厂,它被多个Web请求同时使用来创建短暂的对象,并被一个Web请求释放,那么所有短暂的对象都会被释放,无论它们是从哪个Web请求创建的。它几乎看起来比为每个Web请求或短暂的生活方式制作类型的工厂更好。

在您的编辑中,您提到了Web请求中的瞬态组件。如果这是用于Web应用程序,为什么不使用PerWebRequest生命周期(该生命周期具有明确定义的组件释放终点)呢? - PatrickSteele
如果我有一个PerWebRequest生命周期的类型化工厂,那么它会自动释放它创建的所有短暂对象吗? @PatrickSteele - jjathman
1个回答

8
这是一篇详细的文章,介绍了Windsor跟踪对象的方式以及何时需要调用Release方法:http://kozmic.pl/2010/08/27/must-i-release-everything-when-using-windsor/ 更新内容:
  1. 对于单例对象的释放操作会被忽略,因此你说得对--它不会被释放。

  2. 你只需要担心你明确解析(resolved)的组件是否需要释放。如果是由Windsor解析的(通过Typed Factory Facility、子依赖关系解析器等),则不需要担心。


1
谢谢,我已经多次阅读了那篇文章,但仍然对一些细节不确定。我在我的问题中添加了更多细节,关于我特别想知道的内容。你能看一下吗? - jjathman
当你说“特别解决”时,你的意思是不通过构造函数注入吗? - Kellen Stuart

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接