0

如何确保容器是类的实例,或者不是,这取决于是否有指向它的链接。我使用 MEF 容器,C#

编辑: 在此处输入图像描述

换句话说,我需要管理对象共享类的生命周期的能力。例如,我有两个点(对象 Obj1、Obj2),它们导入了对共享对象(Obj3)的引用,但是这些类是 NoneShared 并且不会长期存在,但是对象(Obj3) - 他们导入了一个链接又大又贵,它总是留在记忆中。

也许还有其他 IoC 容器,它们会提供更多使用对象生命周期的机会?

4

1 回答 1

1

使用 Shared Creation 策略创建的部件将由容器持有并共享容器的生命周期。

即使共享部分用于填充已处置对象的导入,该部分仍将与容器一起存在。

以下是解决此问题的方法:

1:通过在您的导出中使用以下属性,将部件的创建策略更改为非共享:

[PartCreationPolicy(CreationPolicy.NonShared)]

2:您可以使用容器上的 ReleaseExport 方法( doc doc)释放特定部分。请注意,这将再次仅适用于非共享部件。

3:为您的共享部分( doc)使用子容器。这样您就可以处理子容器,而子容器又会处理它的共享部分。您可以在 using 中使用子容器,以确保它在使用后被丢弃。这是我看到摆脱容器中共享部分的唯一方法。

哦,顺便说一句,

也许还有其他的 IoC 容器,

MEF 在技术上不是 IoC 容器。它使用 IoC 的概念,您可以像使用 IoC 容器一样使用它,但它首先是扩展框架。

于 2012-02-11T05:44:54.253 回答