我有一个 PRISM 桌面应用程序,它在 DirectoryModuleCatalog 的帮助下从目录加载模块。
一切都很好,除了我找不到获取已加载模块实例的方法。 IModuleManager 和 IModuleCatalog 没有像 getInstance(ModuleInfo) 或类似的方法。
见
moduleManager.LoadModule(moduleInfo.ModuleName);
此行正确加载了模块(moduleManager 的类型为 IModuleManager),但是接下来我必须做什么才能获取该模块的实际实例?
模块是根据用户的需要加载的,所以我无法在启动时在引导程序中注册所有模块。
如果 Module 实例是指实现 IModule 的类,那么您必须显式地将实例注册到容器中才能获取它。
虽然上述方法可行,但您根本不应该采用这种方法。这个想法是模块类是特定于特定模块的,应该只用于模块初始化目的。
我会将每个模块的 Start 方法放在一个单独的组件 (IStartable) 中,用不同的 Id 在容器中注册每个组件,并解析/导入一个 IEnumerable 以获取所有具有 start 方法的实例。
希望这有帮助
也许这可以通过使用 IEventAggregator 来实现,多个模块可以订阅其他模块发布的事件,例如保存、撤消、重做等。任何模块都应该根据自己的状态执行特定的模块操作。
https://prismlibrary.com/docs/event-aggregator.html