我有一个包含多个区域的“父”视图,我将其他视图加载到其中。这些“子”视图始终相同,并且在运行时不会更改,因此它们在应用程序启动期间使用regionManager.RegisterViewWithRegion...
语法注册到其区域。目前所有的视图都是单例的,我使用 Castle Windsor for IoC。
请记住,在嵌套区域中的视图模型上不会调用“INavigationAware”方法,什么是初始化和清理我的子视图的好方法?父虚拟机保存对子虚拟机的引用(注入)是“可接受的”设计吗?然后我可以从父方法中调用子虚拟机上的某种初始化/清理OnNavigatedTo()/From()
方法吗?
另一种选择可能是将视图更改为瞬态,然后我可以简单地使用构造函数进行初始化,而不用担心清理(我只是在视图被重新使用和显示之前清除旧的“状态”)。唯一的潜在问题是我的应用程序使用“事件服务”(类似于 Prism 的事件代理),其中一些视图模型充当发布者,而其他视图模型充当订阅者。我担心如果我将它们设为瞬态,视图模型将不会因为事件订阅而被 GC,并且这些“死”视图将继续响应事件。它是否正确?如果是这样,我大概需要实施一种清理方式(如上所述),我可以在哪里取消订阅?