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