【发布时间】:2012-02-05 23:05:16
【问题描述】:
我在 MEF 的部分生命周期中遇到了一些问题,导致我的 Prism 应用程序出现内存泄漏。
我的应用程序导出视图和视图模型,其中 PartCreationPolicy 设置为 CreationPolicy.NonShared。视图和视图模型分别继承自ViewBase 和ViewModelBase,它们实现了IDisposable。
现在,由于我的部件实现了IDisposable,容器保留了对它们的引用,这导致垃圾收集器不会释放它们。根据MEF documentation on part lifetime,这是设计使然:
除非满足以下条件之一,否则容器不会保存对其创建的部件的引用:
- 该部分标记为
Shared- 部分实现
IDisposable- 一个或多个导入配置为允许重组
我怎样才能让 MEF 不保留对这些部分的引用?是否有一个属性可以让 MEF 知道我不希望它保留对我的部分的引用,即使它实现了IDisposable?
上面文章中讨论的两种策略对我来说似乎都不是好的解决方案:
-
ReleaseExport需要Export对象作为参数,我不知道如何提供。我有我的视图实例,但我无法知道用于创建视图的合同是什么。如果ReleaseExport有一个可以接收容器创建的任何对象的重载,那就太好了。 - 使用子容器似乎也不是一个自然的选择。
任何帮助将不胜感激。
【问题讨论】:
标签: .net memory-leaks prism mef object-lifetime