我们正在构建一个 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应用程序配置。但这违背了能够将模块存储在一个位置以供多个应用程序加载的目的。它确实需要在主要应用程序的应用程序配置。
有没有一种方法可以在区域中注册模块的视图,而无需在代码中硬编码区域的名称?我们努力不硬编码任何东西。这里真的有必要吗?