如何在 PRISM 中获取模块实例

发布于 2024-12-11 22:00:36 字数 375 浏览 0 评论 0原文

我有一个 PRISM 桌面应用程序,它在 DirectoryModuleCatalog 的帮助下从目录加载模块。

一切都很好,除了我找不到获取已加载模块实例的方法。 IModuleManager 和 IModuleCatalog 没有像 getInstance(ModuleInfo) 或类似的方法。

请参阅

moduleManager.LoadModule(moduleInfo.ModuleName);

此行正确加载模块(moduleManager 的类型为 IModuleManager),但是接下来我需要做什么才能获取此模块的实际实例?

这些模块是根据用户的需求加载的,因此我无法在引导程序中启动时注册所有模块。

I have a PRISM desktop app which loads modules from a directory with the help of the DirectoryModuleCatalog.

Everything is fine, except that I cannot find a way to get the instance of a loaded module.
IModuleManager and IModuleCatalog don't have a method like getInstance(ModuleInfo) or similar.

See

moduleManager.LoadModule(moduleInfo.ModuleName);

This line loads the module properly(moduleManager is of type IModuleManager), but what do I have to do next to get the actual instance of this module?

The modules are loaded on demand of the user, so I cannot register all modules at startup within the bootstrapper.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

云雾 2024-12-18 22:00:36

如果您所说的 Module 实例是指实现 IModule 的类,那么您必须显式地将实例注册到容器中才能获取它。

尽管上述方法可行,但您根本不应该采用这种方法。这个想法是模块类特定于特定模块,并且应该仅用于模块初始化目的。

我会将每个模块的 Start 方法放在单独的组件 (IStartable) 中,使用不同的 Id 注册容器中的每个组件,并解析/导入 IEnumerable 以获取具有 start 方法的所有实例。

希望这有帮助

If by Module instance you mean the class that implement IModule, then you must explicitly register the instance into the container to be able to get it.

Although the aforementioned will work, you should not take that approach at all. The idea is that the module classes are specific to a particular module and should only be used for module initialization purposes.

I would place each module's Start method in a separate component (IStartable), register each component in the container with a different Id and resolve/import an IEnumerable to get all instances that have the start method.

Hope this helps

舟遥客 2024-12-18 22:00:36

也许这可以通过使用 IEventAggregator 来实现,多个模块可以订阅其他模块发布的事件,例如保存、撤消、重做等。任何模块都应该根据自己的状态执行特定的模块操作。
https://prismlibrary.com/docs/event-aggregator.html

Maybe This could be made by using IEventAggregator, several modules can subscribe to an event that is published by other, for example Save, Undo, Redo, etc. any module should perform the specific module action base on your own state.
https://prismlibrary.com/docs/event-aggregator.html

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文