Мы создаем приложение WPF Prism. У нас есть разные разработчики, работающие над разными проектами модулей, и несколько модулей внедряются в основную оболочку приложения. Основное приложение также является отдельным проектом. Мы также хотим иметь возможность использовать модули в разных приложениях. Мы не хотим называть регионы с одинаковыми именами в каждом приложении.
Например, скажем, у нас есть модуль, который будет использоваться в двух разных приложениях. В одном приложении его разработчик может назвать регион модуля «DetailsRegion», а в другом его разработчик может назвать его «ResultsRegion».
Каждый пример, который я могу найти, регистрирует представление с помощью региона путем жесткого кодирования имени региона в определении класса модуля :
myRegionManager.RegisterViewWithRegion("RegionNameHere", GetType(ModuleViewType))
Что я хочу сделать, это поместить имя региона в файл app.config основного приложения и передать это имя модулю. Примерно так:
В файле app.config основного приложения Shell:
<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 недоступен на этом уровне.
Я могу сделать это, указав название региона в разделе ApplicatonSettings app.config модуля . Но это противоречит цели возможности хранить модуль в одном месте для загрузки несколькими приложениями. Он действительно должен находиться в app.config основного приложения .
Есть ли способ зарегистрировать View модуля в Region без жесткого кодирования названия Region в коде? Мы так стараемся, чтобы не кодировать что-либо. Это действительно необходимо здесь?