【问题标题】: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 实现的)创建组件时,如果您不释放它们,您的组件将不会被垃圾收集。组件可以通过以下任一方式发布:

    1. 在抽象工厂上创建 Release 方法。此方法应采用一个参数(通常是对象)和一个 void 返回类型。调用此方法将释放创建的组件。
    2. 释放工厂。这将释放工厂创建的所有组件。

    通常直接调用容器是个坏主意。只直接调用容器到:

    1. 设置容器。
    2. 解析您的顶级组件。
    3. 丢弃容器(以及里面的所有组件)

    我希望这会有所帮助。

    亲切的问候, 马尔维恩。

    【讨论】:

    • 感谢您提供有关工厂发布方法和温莎类型工厂的提示。有了这个提示,我找到了docs.castleproject.org/… 页面和搜索方向。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多