120 likes | 269 Views
Максим Павловский twitter: @ paulousky www.maxpaulousky.com. Использование MEF для разработки Silverlight приложений. Миграция на Prism 4 MEF edition. Отличия MEF от MEF for Silverlight. Введён класс CompositionInitializer
E N D
Максим Павловский twitter: @paulousky www.maxpaulousky.com Использование MEF для разработки Silverlight приложений. Миграция на Prism 4 MEF edition
Отличия MEF от MEF for Silverlight • Введён класс CompositionInitializer • Позволяет инициализировать объекты в любом месте программы, используя глобальный контейнер; • Класс DeploymentCatalog • Реализует поддержку отложенной загрузки *.xap файлов и рекомпозиции сущностей; • Класс CompositionHost • Принимает на вход каталоги, которые содержат сборки для создания композиции; • Класс ExportFactory<T> • Используется для многократного создания экземпляров экспортируемых сущностей;
Динамическая загрузка XAP файлов • private void ComposeContainer(){ • _aс = new AggregateCatalog(); • CompositionHost.Initialize(_aс); • CompositionInitializer.SatisfyImports(this); • } • private void LoadXapFile(string url){ • DeploymentCatalog catalog = new DeploymentCatalog(url); • catalog.DownloadAsync(); • _ac.Catalogs.Add(catalog); • }
Динамическая загрузка XAP файлов Демонстрация
Нововведения Prism 4 • Подержка .Net 4 и Siverlight 4; • Поддержка Mefконтейнера; • Поддержка Windows Phone 7; • Динамическая загрузка xapфайлов
Алгоритм миграции на Prism 4 Mef edition • Изменения в ссылках внешние сборки: • + System.ComponentModel.Composition; • + Microsoft.Practices.Prism; • + Microsoft.Practices.Prism.MefExtensions; • - Microsoft.Practices.Unity; • - Microsoft.Practices.Composite; • - Microsoft.Practices.Composite.Presentation; • - Microsoft.Practices.Composite.UnityExtensions;
Алгоритм миграции на Prism 4 Mef edition • Изменяем namespace c Microsoft.Practices.Composite… на Microsoft.Practices.Prism… ; • Убраем IUnityContainerиз конструкторов и добавляем атрибут [ImportingConstructor]; • Добавляем использование атрибута [Export(typeof(<Type>))]; • Существующие ViewModelнаследуем от NotificationObject для упрощения работы с INotifyPropertyChanged;
Алгоритм миграции на Prism 4 Mef edition • Для каждого модуля добавляем атрибут [ModuleExport(typeof(<ModuleType>))]; • Изменяем вызов RaisePropertyChanged на RaisePropertyChanged(() => <FieldName>); • Переписываем Bootstrapper: • Перенаследуем от MefBootstrapper; • Добавляем переопределённый метод ConfigureAggregateCatalog(), где регистрируем изначально доступные сборки; • Инициализация модулей через каталог не меняется; • Переопределяем метод InitializeShell(): Application.Current.RootVisual = (ShellView)this.Shell;
Алгоритм миграции на Prism 4 Mef edition • Следует избегать добавления Prism сборок в каждый *.XAP файл. Им следует выставить CopyLocal = False; • Можно воспользоваться add-on к Visual Studio XapsMinifier • В ModuleCatalog следует использовать полное квалифицированное имя сборки: “<ModuleNamespace>, <ModuleAssembly>, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”
Играция на Prism 4 Mef edition Демонстрация
Полезные ссылки • Prism http://compositewpf.codeplex.com • Managed Extensibility Framework http://mef.codeplex.com • VS2010 add-on XapsMinifierhttp://bit.ly/XapsMin;
Спасибо! Ваши отзывы будут очень полезны