【问题标题】:Should I call ioc.release() on object created by abstract factory?我应该在抽象工厂创建的对象上调用 ioc.release() 吗?
【发布时间】:2013-02-25 14:47:16
【问题描述】:
我有一个简单的图表编辑器,在阅读了有关 IoC 和 DI 的书籍后,我决定尝试借助它们提供的帮助来解耦我的代码。看起来当用户将图表项目添加到图表时,项目由抽象工厂创建并添加到项目的内部图表列表中。但是当用户想要从图表中删除项目时该怎么办?首先我应该从内部列表中删除项目。然后我对sould i IoC.Release(Item)有一些误解吗?如果我不调用 IoC.Release(Item) (避免了解我的对象中的 IoC),那么 IoC 中的 Item 会发生什么。
PS:我正在尝试使用温莎城堡
【问题讨论】:
标签:
inversion-of-control
castle-windsor
abstract-factory
【解决方案1】:
当您使用抽象工具(我假设它是使用 Windsor TypeFactory 实现的)创建组件时,如果您不释放它们,您的组件将不会被垃圾收集。组件可以通过以下任一方式发布:
- 在抽象工厂上创建 Release 方法。此方法应采用一个参数(通常是对象)和一个 void 返回类型。调用此方法将释放创建的组件。
- 释放工厂。这将释放工厂创建的所有组件。
通常直接调用容器是个坏主意。只直接调用容器到:
- 设置容器。
- 解析您的顶级组件。
- 丢弃容器(以及里面的所有组件)
我希望这会有所帮助。
亲切的问候,
马尔维恩。