Максим Павловский
Введён класс CompositionInitializer Позволяет инициализировать объекты в любом месте программы, используя глобальный контейнер; Класс DeploymentCatalog Реализует поддержку отложенной загрузки *.xap файлов и рекомпозиции сущностей; Класс CompositionHost Принимает на вход каталоги, которые содержат сборки для создания композиции; Класс ExportFactory Используется для многократного создания экземпляров экспортируемых сущностей;
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); }
Подержка.Net 4 и Siverlight 4; Поддержка Mef контейнера; Поддержка Windows Phone 7; Динамическая загрузка xap файлов
Изменения в ссылках внешние сборки: + System.ComponentModel.Composition; + Microsoft.Practices.Prism; + Microsoft.Practices.Prism.MefExtensions; - Microsoft.Practices.Unity; - Microsoft.Practices.Composite; - Microsoft.Practices.Composite.Presentation; - Microsoft.Practices.Composite.UnityExtensions;
Изменяем namespace c Microsoft.Practices.Composite… на Microsoft.Practices.Prism… ; Убраем IUnityContainer из конструкторов и добавляем атрибут [ImportingConstructor]; Добавляем использование атрибута [Export(typeof( ))]; Существующие ViewModel наследуем от NotificationObject для упрощения работы с INotifyPropertyChanged;
Для каждого модуля добавляем атрибут [ModuleExport(typeof( ))]; Изменяем вызов RaisePropertyChanged на RaisePropertyChanged(() => ); Переписываем Bootstrapper: Перенаследуем от MefBootstrapper; Добавляем переопределённый метод ConfigureAggregateCatalog(), где регистрируем изначально доступные сборки; Инициализация модулей через каталог не меняется; Переопределяем метод InitializeShell(): Application.Current.RootVisual = (ShellView)this.Shell;
Следует избегать добавления Prism сборок в каждый *.XAP файл. Им следует выставить CopyLocal = False; Можно воспользоваться add-on к Visual Studio Xaps Minifier В ModuleCatalog следует использовать полное квалифицированное имя сборки:,, Version= , Culture=neutral, PublicKeyToken=null
Prism Managed Extensibility Framework VS2010 add-on Xaps Minifier