【发布时间】:2020-08-19 10:59:18
【问题描述】:
我正在使用 Prism 中的 DirectoryModuleCatalog 为 wpf 加载一组模块。我想加载一个模块并在我的 shell 应用程序中单击按钮显示其默认视图(所有模块都标有[Module(OnDemand = true)] 属性)。发现模块名称时我会缓存它们:
var modulesCatalog = new DirectoryModuleCatalog {ModulePath = @"C:\WhereTheModulesLive"};
modulesCatalog.Initialize();
foreach (var module in modulesCatalog.Modules)
{
_availableModules.Add(module.ModuleName);
}
这使我能够将我需要的模块的名称映射到一个按钮(下面是作为命令的结果调用的,由按钮单击触发,其中按钮是从 _availableModules 填充的)。目前,我通过按约定命名来导航到默认视图:
private void LoadAndDisplayModule(string moduleName)
{
_moduleManager.LoadModule(_availableModules.GetNameOfModuleToLoad());
_moduleManager.Run();
_regionManager.RequestNavigate(RegionNames.ContentRegion, moduleName + "View");
}
这感觉像是一个不整洁且脆弱的实现——我希望在模块中嵌入更多信息——最好在加载之前对其进行访问。我想知道是否有办法做到这一点?我想知道向模块添加自定义属性,但我无法确定在模块发现期间如何读取它(无需重写 DirectoryModuleCatalog)。或者,如果有办法让模块支持一个接口,它可以转换为 (MyModule : IModule, ISupportsDefaultView),但我认为直接访问 IModule 对象违背了 Prism 设计理念。有什么想法吗?
【问题讨论】: