MEF容器中的“一个或一个”实现

时间:2012-02-10 17:09:37

标签: c# mef containers instance lifetime

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

编辑: enter image description here

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

也许有其他IoC容器,它们将提供更多机会来处理对象的生命周期?

1 个答案:

答案 0 :(得分:1)

使用共享创建策略创建的部件将由容器保留并共享容器的生命周期。

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

以下是解决这个问题的方法:

1:使用导出中的以下属性将零件的创建策略更改为NonShared:

[PartCreationPolicy(CreationPolicy.NonShared)]

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

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

哦,顺便说一句,

  

也许还有其他IoC容器,

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