Як зробити Prism (MEF) додаток на Silverlight

Досить тривалий час не займався проектами на Silverlight. Тому руки не доходили до Prism. Коротше, забув геть-чисто про те як із простого Silverlight-додатка зробити додаток на Prism, та ще й такий, який використовує MEF. Ось якраз у цій статті згадуватиму, а за одне і послідовно описуватиму як цей зробити.

Створюємо проект Silverlight

Отже, спершу завантажуємо бібліотеку Prism з офіційного сайту. На момент написання статті версія запропонована для завантаження була Prism 4.0 November 2010. Тепер створюємо новий Silverlight-проект.

Prism

Назва вибрана, папка збереження проекту вказана, натискаю OK. У наступному вікні майстра вказую, що не треба створювати Web-проект, відключивши відповідну галку. Підтверджую вибір. Початок покладено. Тепер одразу ж видаляю файл MainPage.xaml, тому що мені він не знадобиться. Треба додати збірки Prism до проекту:

Prism

Так як я хочу використовувати MEF, тому відзначаю ще й Microsoft.Practice.Prism.MefExtentions.dll – збирання розширень. Створюю новий Bootstrapper, який є “стартером” програми. І перш ніж почати з ним роботу створимо я Shell для мого проекту. Додаю до проекту новий Silverlight User Control під назвою Shell.xaml. Тепер повертаюся до "стартера". Успадкуюся від MefBootstrapper, перевизначу метод CreateShell(), ConfigureAggregateCatalog() та InitializeShell(). Ось як тепер виглядає мій стартер:

Добре… добре, тому що не компілюється додаток, але я знаю, чому (файл MainPage.xaml був видалений). Щоб почалося все компілюватися, зробимо наступне. Додаю ще одну збірку до проекту: System.ComponentModel.Composition.dll:

Це тому, що це вимагає MEF. Тепер потрібно внести деякі зміни у файліApp.xaml.cs. Треба ж якось вказати що є стартовим інтерфейсом користувача:

Сподіваюся, зрозуміло, що зробив. Компілюю... Помилок немає, але при запуску отримую помилку... А-а-а-а. Треба поставити атрибут експорту на класі Shell.

Ось тепер проект запустився! І хоч не дуже приємно дивитись на порожній екран, зроблю невеликий ліричний відступ.

Експорт шаблону програми

Справа в тому, що починати програмувати будь-яку програму на Prism потрібно буде майже завжди однаково так, як я щойно показав. Тобто, за великим рахунком, цей приклад є практично готовим шаблоном для всіх наступних проектів. А значить, якщо натиснути в меню File –> Export Template:

Shell

І далі, слідуючи підказкам майстра збереження шаблону, можна уникнути повторень вище виконаних операцій, зберігши поточний проект як шаблон проекту. Якщо Ви збережете цей шаблон, то наступного разу можна буде просто вибрати його зі списку запропонованих шаблонів проектів.

Хочеться видовищ

Білий екран – не найприємніший вид для програми, що працює. Треба щось відобразити, а за одне, покажу якісь подальші дії можна зробити, щоб побачити в дії і Prism, і MEF.

Можна використовувати набір бібліотек Prism по-різному. Я покажу приклад із використанням регіонів. Для цього відкрию Shell і додам потрібний namespace, щоб додати в розмітку регіон:

Тепер додам контроль ContentControl і позначу його:

Добре. Потрібно тепер у цей регіон щось запхати. Створюю нову візуальну виставу (SimpleView.xaml), щоб було на що запихати. Подання просто! Я змінив колір фону і цього достатньо, щоб побачити, що View успішно підключена:

У Shell требаотримати екземпляр IRegionManager і самої SimpleView, а потім покласти одне в інше. Спочатку помічаю представлення атрибутом експорту:

У файлі Shell.xaml.cs налаштовую імпорти:

Ну, і нарешті, що містить цю статтю код:

Готово. Компіляція, запуск... Успішно! Переді мною IE яскраво оранжевого кольору. Що й потрібно було довести. Ура! Дякую за увагу. І нехай прибуде з вами сила MEF!