【发布时间】:2019-09-03 17:22:28
【问题描述】:
我正在使用 Prism 在我的 WPF 应用程序中的视图之间导航。特别是我使用 IRegionMemberLifetime.KeepAlive => 实现的一个视图返回 false;每次导航到视图时创建一个新的视图实例(出于显示原因,我们需要这样做)。此视图还包含一个自定义 win32 控件,我需要在使用 IDisposable.Dispose 时对其进行一些清理。当我导航到我的视图然后离开它时,我希望 Dispose 被调用(运行清理)。我可以通过实现这里讨论的自定义区域行为来实现这一点,https://github.com/PrismLibrary/Prism/issues/7。所有这一切都工作正常,除了所有东西都被标记为待处理,但 GC 实际上并没有摆脱任何东西。我使用 Autofac 作为我的 IOC 容器,经过一些研究后,我得出结论,原因归结为 Autofac 和 IDisposables 的生命周期范围,https://nblumhardt.com/2011/01/an-autofac-lifetime-primer/。基本上 Autofac 持有对 IDisposable 的引用,因此 GC 不会摆脱旧视图。例如,我在模块中将我的视图注册为 _container.RegisterTypeForNavigation();我无法在任何类型的生命周期内注册它,我不确定如何在指定的生命周期内解决这个问题?当我调用 RegionManager.RequestNavigate 时,我没有看到任何类型的重载来指定生命周期?任何想法将不胜感激。
【问题讨论】:
标签: prism