Здравствуйте, 1datr, Вы писали:
1>Хотелось бы все-таки по-русски
Если по-русски, то очень коротко. Да, могу ошибаццо в деталях, ибо не помню, но суть верна.
Итак, CAB имеет след.идеологию: стартер и куча модулей + инфраструктура.
Стартер (Shell) загружает модули при помощи инфраструктурных сервисов ModuleFinder и ModuleLoader.
Модуль = сервисы + представление триадой MVP + ресурсы + управление жизненным циклом.
При загрузке и инициализации модуля происходит настройка сервисов и встраивание в Shell триад MVP.
Встраивание происходит приблизительно так: у каждого модуля есть точки подключения к меню в Shell: UIExtensionPoints (или как-то так, не помню),
через которые происходит подключение модулей к главному меню приложения.
Еще есть такое понятие, как workspace (замененое в последней версии для WPF на Region) — область, в которой хостится представление модуля. Т.е. можно сразу указать, что
модуль MyModule будет жить в области TopWorkspace.
Представление модулей организовано как MVP.
Для взаимодействия представлений и моделей используется паттерн Command, причем в стиле WPF, т.е. команда не содержит состояний, а вызывает внедренный делегат, и, фактически, существует лишь для "развязывания" зависимостей между контролами, пунктами меню и представлениями. Похоже на Action из Delphi

Сервис может содержать объявление вида
[CommandHandler(typeof(Commands.MyCommand))]
public void MyCommandHandler(...)
{
...
}
тогда метод будет передан в команду при инициализации и выполнится при command.Execute();
Внутри отдельной триады MVP события передаются традиционным образом, через делегаты. Разные же триады общаются между собой посредством EventBroker.
Собственно, EventBroker представляет собой глобальный пул событий, на которые можно подписаться из любого места и которые можно сгенерировать опять же в произвольном месте.
[EventPublication("topic://mouse/click")] //тема события
public event EventHandler Click;
[EventSubscription("topic://mouse/*")] //подписка на все события mouse (в том числе и на click)
public void ClickEventHandler(...) { }
Короче, штука гибкая и удобная.
Приложение содержит "глобальные" каталоги команд и событий, и различные модули общаются между собой только при их помощи.
Э-э-э... вроде все.
Будут вопросы по существу — задавайте
На опушке за околицей мужики строили коровник.
Работали споро и весело. Получалось х**во.