Ну, думаю, я наконец понял, как это должно работать.
Чтобы установить основание для этой публикации, скажем, что модуль приложения (не призменный модуль) представляет собой набор представлений (ранее называвшихся формами) и процедур, связанных с конкретными действиями в бизнес-процессе, например: Продажи , Инвентарь, банковское дело ... и т. Д.
Внутри каждого модуля приложения мы найдем такие процессы, как Sales.Invoices, Sales.Orders, Inventory.Products, Inventory.Stocks и т. Д.
Теперь в призме, как говорит @Elad, создание нового проекта для каждого процесса внутри модуля приложения может быть огромным перебором, и, как говорит @David, Prism делает различие между созданием представления и его отображением.
Ну, чтобы поступить правильно (то есть послушать этих ребят), я решил пойти так:
1) Отличить проект Visual Studio от модуля Prism:
На самом деле нет необходимости разбивать прикладные модули на различные проекты в вашем решении, все, что вам нужно сделать, это создать один проект с помощью «прикладного модуля»
2) Создайте разные классы инициализатора модулей внутри каждого проекта «Модуль приложений», по одному для каждого процесса, например ::1133*
Для процесса "A" внутри модуля MyApplicationModule:
<ModuleExport(GetType(MyApplicationModule.ProcessAInitializer))> _
Public Class ProcessAInitializer
Implements IModule
<Import()> _
Public Property RegionManager As IRegionManager
#Region "IModule Implementation"
Public Sub Initialize()
Implements Microsoft.Practices.Prism.Modularity.IModule.Initialize
RegionManager.RegisterViewWithRegion(RegionNames.SubMenuView,
GetType(MyApplicationModule.SubMenuViewA))
RegionManager.RegisterViewWithRegion(RegionNames.ContentRegion,
GetType(MyApplicationModule.ContentViewA))
End Sub
#End Region
End Class
Для процесса "B" внутри модуля MyApplicationModule:
<ModuleExport(GetType(MyApplicationModule.ProcessBInitializer))> _
Public Class ProcessBInitializer
Implements IModule
<Import()> _
Public Property RegionManager As IRegionManager
#Region "IModule Implementation"
Public Sub Initialize()
Implements Microsoft.Practices.Prism.Modularity.IModule.Initialize
RegionManager.RegisterViewWithRegion(RegionNames.SubMenuView,
GetType(MyApplicationModule.SubMenuViewB))
RegionManager.RegisterViewWithRegion(RegionNames.ContentRegion,
GetType(MyApplicationModule.ContentViewB))
End Sub
#End Region
End Class
3) Как только мы это получим, давайте немного изменим, как создается ваш каталог модулей в вашем проекте оболочки. В моем случае я использую код для добавления модулей Prism один за другим, вы можете загрузить определение модулей из файла, но принцип тот же:
Protected Overrides Function CreateModuleCatalog() As
Microsoft.Practices.Prism.Modularity.IModuleCatalog
Dim objModuleCatalog = New ModuleCatalog
objModuleCatalog.AddModule(New ModuleInfo()
With {.InitializationMode = InitializationMode.OnDemand,
.Ref = "MyApplicationModule.xap",
.ModuleType = "MyApplicationModule.ProcessAInitializer, MyApplicationModules, Version 1.0.0.0, Culture=neutral, PublicKeyToken=null",
.ModuleName = "ProcessAInitializer"})
objModuleCatalog.AddModule(New ModuleInfo()
With {.InitializationMode = InitializationMode.OnDemand,
.Ref = "MyApplicationModule.xap",
.ModuleType = "MyApplicationModule.ProcessBInitializer, MyApplicationModule, Version 1.0.0.0, Culture=neutral, PublicKeyToken=null",
.ModuleName = "ProcessBInitializer"})
Return objModuleCatalog
End Function
Заключение
Таким образом, ваши представления будут создаваться только тогда, когда пользователь запрашивает этот конкретный «бизнес-процесс», вам не нужно разбивать ваше решение на более мелкие части, поэтому его компиляция занимает вечность, а ваше решение остается «дружелюбным для команды».
Спасибо @David & @ Elad