У меня есть приложение, разработанное с использованием библиотеки составных приложений Microsoft. В моей оболочке определено несколько регионов, так что я могу вводить контент из отдельных модули. Я ищу шаблон проектирования, который уменьшит связь, создаваемую этими регионами.
Во всех примерах, которые я видел, регионы определены и доступны с помощью строки в статическом классе в проекте инфраструктуры .:
<ItemsControl cal:RegionManager.RegionName="{x:Static inf:RegionNames.TabRegion}">
public static class RegionNames
{
public const string TabRegion = "TabRegion";
}
Это вводит зависимость оболочки от проекта инфраструктуры, поскольку часть проекта инфраструктуры теперь должна соответствовать оболочке. CAL RegionManager генерирует исключение, если вы пытаетесь получить доступ к области, которая не определена, поэтому я должен обеспечить синхронизацию проектов инфраструктуры и оболочки.
Есть ли способ изолировать области оболочки, чтобы они определялись только внутри оболочки (без имен регионов в проекте инфраструктуры)?
Есть ли способ сделать регионы необязательными, чтобы можно было менять оболочки, даже если в них нет всех одинаковых регионов? (Пример: одна оболочка имеет области меню и панели инструментов, другая имеет только меню ... модули должны иметь возможность вставлять в панель инструментов, если она доступна, без сбоев, когда это не так)
Обновление - Подробнее о моей архитектуре
В ответ на ответ depictureboy Ниже я хотел описать, как устроена моя система ... возможно, будет больше хороших отзывов о ней.
Я рассматриваю проекты Infrastructure и Shell как общие библиотеки, и у меня есть несколько приложений, которые их используют. Проект Infrastructure предоставляет код фреймворка и ресурсы (такие как материал MVVM, отражение, значки), а моя оболочка - это общее главное окно с базовым макетом окна (меню, панели инструментов, строка состояния, область основного содержимого). Все приложения имеют общий вид и ведут себя одинаково, потому что они используют оболочку.
Мои приложения получают свою индивидуальную функциональность от загружаемых модулей, поэтому у меня есть проект загрузчика для каждого приложения, который объединяет все вместе (инфра, оболочка, модули).
Я предполагаю, что если мне когда-нибудь понадобится разработать совершенно новое приложение, которое будет сильно отличаться от текущих, я смогу повторно использовать проект инфраструктуры, но не оболочку. Вот почему мне интересно разделить инфраструктурный проект и оболочку.