我应该在抽象工厂创建的对象上调用ioc.release()吗?

时间:2013-02-25 14:47:16

标签: inversion-of-control castle-windsor abstract-factory

我有一个简单的图表编辑器,在阅读有关IoC和DI的书籍之后,我决定尝试使用他们提供的帮助来解耦我的代码。看起来当用户将图表项添加到图表时,项目由抽象工厂创建并添加到内部图表项目列表中。但是,如果用户想要从diargam中删除项目,该怎么办?首先我应该从内部列表中删除项目。然后我对IoC.Release(Item)或者没有产生一些误解?如果我不调用IoC.Release(Item)(避免在我的对象内部了解IoC),IoC中的Item会发生什么。

PS:我正在尝试使用Castle Windsor

1 个答案:

答案 0 :(得分:2)

使用抽象工具创建组件时(我假设使用Windsor TypeFactory实现),如果不释放组件,则不会对组件进行垃圾回收。组件可以通过以下任一方式释放:

  1. 在您的抽象工厂上创建一个Release方法。此方法应该采用一个参数(通常是对象)和一个void返回类型。调用此方法将释放创建的组件。
  2. 发布工厂。这将释放工厂创建的所有组件。
  3. 通常,直接调用容器是个坏主意。只能直接调用容器:

    1. 设置容器。
    2. 解析您的顶级组件。
    3. 处置容器(及其内部的所有组件)
    4. 我希望这会有所帮助。

      亲切的问候, Marwijn。