小编D'H*_*Hag的帖子

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

我们正在构建一个WPF Prism应用程序.我们有不同的开发人员在不同的模块项目上工作,并且多个模块被注入主Application Shell.主要应用程序也是一个单独的项目.我们还希望能够在不同的应用程序中使用这些模块.我们不希望在每个应用程序中命名具有相同名称的区域.

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

我能找到的每个例子都通过硬编码模块类定义中的区域名称来注册View with the Region :

myRegionManager.RegisterViewWithRegion("RegionNameHere", GetType(ModuleViewType))
Run Code Online (Sandbox Code Playgroud)

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

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

<Modules>
   <SearchModule>
       <add key="RegionName" value="SearchRegion" />
    </SearchModule>
</Modules>
Run Code Online (Sandbox Code Playgroud)

在模块的类文件中:

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

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

这在模块的视图中完美地工作.但我无法在模块的类定义文件中执行此操作,因为ConfigurationManager在该级别不可用.

我可以通过将区域名称放在模块的 app.config 的ApplicatonSettings部分来完成此操作.但这违背了能够将模块存储在一个位置以便由多个应用程序加载的目的.它确实需要在主应用程序的 app.config中.

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

wpf module region prism-4

6
推荐指数
1
解决办法
3175
查看次数

标签 统计

module ×1

prism-4 ×1

region ×1

wpf ×1