【问题标题】:How to get a module instance in PRISM如何在 PRISM 中获取模块实例
【发布时间】:2011-10-25 09:07:06
【问题描述】:

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

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

moduleManager.LoadModule(moduleInfo.ModuleName);

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

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

【问题讨论】:

  • 为什么需要模块实例?请描述您的问题,而不是您想到的解决方案。
  • @PVitt 加载的模块实现了一个特定的接口,我需要在所有这些加载的模块实例上调用 start() 方法。
  • 为什么必须在所有模块上调用 start?
  • 因为用户可以选择多个模块,所有模块都可以在运行中启动和停止。如果用户想一次停止说 3 个模块,我必须在这些模块上调用 stop() ,以便它们改变它们的状态。真的没有办法至少获得加载模块的类型吗?我什至无法使用统一容器注册模块?!
  • 我认为你应该问一个问题“如何在运行时加载和卸载 prism 模块”。

标签: module prism instance


【解决方案1】:

如果模块实例是指实现 IModule 的类,则必须将实例显式注册到容器中才能获取它。

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

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

希望对你有帮助

【讨论】:

  • 感谢您的回答。我就是这么做的!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-05
相关资源
最近更新 更多