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