gpt4 book ai didi

wpf - Prism/MEF : How to RegisterViewWithRegion Without Hard-Coding the Region Name

转载 作者:行者123 更新时间:2023-12-04 14:33:40 25 4
gpt4 key购买 nike

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

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

我可以找到的每个示例都通过在模块的类定义中硬编码区域名称来使用区域注册 View :

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)

在某种程度上,这将是使模块与外壳和彼此完全分离的最后一步。

这在 中完美运行浏览量 的模块。但我不能在模块的 中做到这一点类定义 文件,因为 ConfigurationManager 在该级别不可用。

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

有没有办法用区域注册模块的 View ,而无需在代码中硬编码区域的名称?我们非常努力地不硬编码任何东西。这里真的有必要吗?

最佳答案

正如 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>

关于wpf - Prism/MEF : How to RegisterViewWithRegion Without Hard-Coding the Region Name,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7408235/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com