Prism / MEF:如何在不硬编码区域名称的情况下注册ViewWithRegion

2024-05-13

我们正在构建一个 WPF Prism 应用程序。我们有不同的开发人员从事不同的模块项目,并且多个模块被注入到主应用程序外壳中。主应用程序也是一个单独的项目。我们还希望能够在不同的应用程序中使用这些模块。我们不希望在每个应用程序中都使用相同的名称来命名区域。

例如,假设我们有一个模块要在两个不同的应用程序中使用。在一个应用程序中,其开发人员可以将模块的区域命名为“DetailsRegion”,而在另一个应用程序中,其开发人员可以将其命名为“ResultsRegion”。

我能找到的每个示例都通过硬编码区域名称来注册视图和区域在模块的类定义中:

myRegionManager.RegisterViewWithRegion("RegionNameHere", GetType(ModuleViewType))

我想要做的是将区域名称放入主应用程序的 app.config 文件中,并将该名称传递给模块。像这样的东西:

在主 Shell 应用程序的 app.config 中:

<Modules>
   <SearchModule>
       <add key="RegionName" value="SearchRegion" />
    </SearchModule>
</Modules>

在模块的类文件中:

Dim settings As NameValueCollection = CType(ConfigurationManager.GetSection("Modules/SearchModule"), NameValueCollection)
Dim regionName as string = settings("RegionName")
myRegionManager.RegisterViewWithRegion(regionName, GetType(SearchModuleType)

在某种程度上,这将是模块与 shell 以及模块之间完全解耦的最后一步。

这在views模块的。但我不能在模块中做到这一点类定义文件,因为 ConfigurationManager 在该级别不可用。

我可以通过将区域名称放入 ApplicatonSettings 部分来做到这一点module's应用程序配置。但这违背了能够将模块存储在一个位置以供多个应用程序加载的目的。它确实需要在主要应用程序的应用程序配置。

有没有一种方法可以在区域中注册模块的视图,而无需在代码中硬编码区域的名称?我们努力不硬编码任何东西。这里真的有必要吗?


正如 Meleak 在他的评论中已经提到的:使用静态类

namespace Infrastructure
{
    public static class RegionNames
    {
        public const string MainRegion = "MainRegion";
    }
}

在您的 xaml 代码中,您可以使用区域名称,如下所示:

<UserControl 
    xmlns:Inf="clr-namespace:Infrastructure;assembly=Infrastructure"
    xmlns:Regions="clr-namespace:Microsoft.Practices.Prism.Regions;assembly=Microsoft.Practices.Prism">
    <ContentControl Regions:RegionManager.RegionName="{x:Static Inf:RegionNames.MainRegion}"/>
</UserControl>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Prism / MEF:如何在不硬编码区域名称的情况下注册ViewWithRegion 的相关文章

随机推荐

  • Android:如何按设备类型(平板电脑、手机)设置强制设备方向?

    我需要根据设备类型设置力方向设备 以使用相关视图 平板电脑为横向视图 移动设备为纵向视图 旋转无法在设备上更改 因为我想在应用程序启动期间设置所有活动的方向 所以我认为我应该识别主活动中的设备类型 该活动由与视图相关的其他活动扩展 请问我怎
  • 如何在 switch 语句中将向量作为参数传递

    我对问题的谷歌搜索没有返回有用的结果和文档 switch没有告诉我如何做 所以我希望我能在这里得到答案 假设我有一个向量 cases lt c one two three 我想使用 switch 语句并将这些元素作为 switch 语句的参
  • PHP 将页面生成的标题放入

    我们在网站的所有页面中包含一个 header php 文件 因此 我们可以在 header php 文件中放置一个标题 该标题将应用于整个站点 或者在每个页面中添加一个自定义标题以更具描述性 问题是 这样做时 标题将位于 head 标签之外
  • 使用“actioncolumn”时如何执行视图控制器分离(Ext.grid.column.Action)

    在 ExtJS 4 中 我有一个包含操作列的网格 每当触发该操作时 我想执行 我的操作 如果没有 MVC 这将如下所示 xtype gridpanel columns xtype actioncolumn items handler fun
  • 导入邻居模块时如何正确使用导入

    我的项目目录看起来是这样的 project moduleA a py init py moduleB b py init py 在文件a py中我想从b py导入函数 pycharm建议我这样做 file a py from moduleB
  • static_cast 到相同类型会引入运行时开销吗?

    我有一个结构模板 有两种类型 T and S 并在某些时候使用static cast从一种类型转换为另一种类型 经常出现这样的情况T and S是同一类型 设置的简化示例 template
  • 这个shared_ptr是如何自动转换为裸指针的呢?

    我正在学习enable shared from this现在是 C 11 有一个例子让我很困惑 如何shared ptr返回类型shared from this 可以转换为这个原始指针吗 include
  • 如何根据纬度和经度获取国家名称

    如何使用 C 从纬度和经度获取国家 地区名称 我正在使用 Bing Map API Location location12 new Location location Latitude location Longitude MapLayer
  • Javascript中“从长重新定义为双”是什么意思

    我读了Javascript文档才知道鼠标事件 clientX https developer mozilla org en US docs Web API MouseEvent clientX 我不明白何时以及为什么使用 从长到双重新定义
  • 以编程方式识别 PDF 文件中的扫描文本 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我有一个 PDF 文件 其中包含我们需要导入数据库的数据 这些文件似乎是打印的字母数字文本的 pdf
  • 将 POST 从请求转换为 GAE urlfetch

    我正在使用 PayPal 付款 这是它如何正确工作的requests res requests post get payment info url headers headers data params res data res json
  • 检查 UITableViewCell 是否完全可见

    如何检查 UITableViewCell 在屏幕上是否完全可见 不被选项卡或导航栏切断 我可以使用以下代码获取可见单元格 NSArray indexes tableView indexPathsForVisibleRows 但我想排除屏幕中
  • Android Studio 调试失败,错误:任务 ':app:preDexDebug'.Pl 执行失败

    当我运行我的项目时 它在标题中显示错误 解决办法是什么 apply plugin com android application android compileSdkVersion 24 buildToolsVersion 24 0 0 d
  • jQuery .getJSON 与 .post 哪一个更快?

    Using getJSON or post 我正在尝试通过仅用于 AJAX 请求的页面发送一些参数 并获取 JSON 或 html 片段中的一些结果 我想知道哪个更快 假设 HTML 文件只是纯布尔文本 true 或 false 正如其他人
  • Stripe API - 代理后面的 PHP Curl 请求

    我正在尝试使用 php 和curl 在代理后面向 stripe api 发出请求 如果我不在代理后面 则以下内容有效 ch curl init curl setopt ch CURLOPT URL https api stripe com
  • 列出某个类的所有对象

    好的 我的问题如下 我有一个用这个构造函数描述宠物的类 public function construct name type age 所以我想做的是制作一些宠物对象 然后我想打印这个类的所有对象的所有属性 这样它看起来像this http
  • 安装pyserial Mac OS 10.10?

    尝试使用 Python 2 7 与 Arduino 串行端口进行通信 已下载 pyserial 2 7 解压缩并将文件夹 pyserial 文件夹放入 python 应用程序文件夹中 没有工作错误消息 没有名为 pyserial 的模块 对
  • AES 在汇编中的实现 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 大家好 我正在尝试构建一个代码来演示
  • 检查 Python 中的唯一输出

    我昨天遇到了一个有趣的数学问题并解决了它 但是根据我编写的代码 我必须进行键盘中断 否则它将永远运行 哈哈 所以我把它改为有结束条件 但现在它只打印 1 个解决方案并停止 问题是这样的 你有数字 123456789 按这个顺序 在每个数字之
  • Prism / MEF:如何在不硬编码区域名称的情况下注册ViewWithRegion

    我们正在构建一个 WPF Prism 应用程序 我们有不同的开发人员从事不同的模块项目 并且多个模块被注入到主应用程序外壳中 主应用程序也是一个单独的项目 我们还希望能够在不同的应用程序中使用这些模块 我们不希望在每个应用程序中都使用相同的