Prism MVVM - 模块

3

我刚开始使用Prism,并依靠MSDN文档来学习。有两个段落特别让我困惑,涉及到模块的主题。

"在模块加载和初始化后,由于Prism不会持有模块实例引用,因此模块程序集无法卸载,所以在完成初始化后可能会对模块类实例进行垃圾回收"

以及

"默认情况下,模块实例的生命周期很短 - 在调用Initialize方法后,对模块的引用将被释放。如果您没有手动建立强引用链到模块实例,则该实例将被垃圾回收"

我有点困惑-这意味着什么?

IModule派生类是您类库的实际实现还是仅负责Prism加载您的实际类库的元数据类?一旦将程序集加载到AppDomain中,您可以随时从中调用代码吗?

我感到困惑-目前,我从这两个段落中得出的结论是:在Prism应用程序中每次使用模块时都需要重新实例化它们?

1个回答

3
继承自IModule的类应该包含一次性初始化代码,比如将视图与区域进行注册。当你加载模块时,会创建一个IModule派生类的实例,并调用Initialize方法,然后该模块被认为已加载。在初始化之后,IModule派生类的实例将会失去,但模块仍然可访问。
底线:不需要每次使用模块时重新加载或初始化。它只会被加载/初始化一次,并且设置完毕。

那么,一个模块对象真的只是一个类库的元数据类/初始化代码吗?并不是实际的模块实现? - blue18hutthutt
是的。模块对象只是元数据和初始化。模块实现在程序集中的其他类中(例如视图及其相应的视图模型)。 - JKor
既然该模块仍然可访问,那么在模块中实例化的任何视图/视图模型都不会被垃圾回收?这可以解释我现在遇到的某些内存问题。 - Chris Klepeis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接