如何确保容器是该类的实例,或者它不是,具体取决于是否有链接。 我使用MEF容器,C#
编辑:
换句话说,我需要能够管理对象共享类的生命周期。例如,我有两个点(对象Obj1,Obj2),它们导入对共享对象(Obj3)的引用,但这些类是NoneShared并且不会长,但是对象(Obj3) - 它们导入的链接大而昂贵,总是留在记忆中。
也许有其他IoC容器,它们将提供更多机会来处理对象的生命周期?
答案 0 :(得分:1)
使用共享创建策略创建的部件将由容器保留并共享容器的生命周期。
即使共享部件用于填充已经处理的对象的导入,该部件仍将与容器一起存在。
以下是解决这个问题的方法:
1:使用导出中的以下属性将零件的创建策略更改为NonShared:
[PartCreationPolicy(CreationPolicy.NonShared)]
2:您可以使用容器上的ReleaseExport方法(doc doc)释放特定部分。请注意,这将仅适用于NonShared部件。
3:为共享部分使用子容器(doc)。通过这种方式,您可以处理子容器,而子容器又会处理它的共享部分。您可以在使用中使用子容器以确保在使用后将其丢弃。这是我看到摆脱容器中共享部分的唯一方法。
哦,顺便说一句,
也许还有其他IoC容器,
MEF在技术上不是IoC容器。它使用了IoC的概念,您可以像使用IoC容器一样使用它,但它首先是扩展框架。