Практикум Silverlight: Начинаем работать с Composite Application Library

Для кого эта статья

Данный пост будет интересен для вас если:

  1. Вы нацелены на развитие
  2. Вы работаете с RIA средой, такой как Silverlight (так же WPF)
  3. Если вы уже где-то слышали такие слова как Composite Application Guidance, Composite Application Library
  4. Вы заинтересовались статьей Павла ИвченковаСоздание приложения на WPF с использованием принципов TDD 
  5. Вам было интересно прочитать статью AcervUse Case Driven Development и Composite UI Application Block

Цель статьи

В этой статье вы узнаете основы того, что содержится в Composite Application Guidance, а так же научитесь создавать составные Silverlight приложения на основе Composite Application Library (создадите загружаемый модуль (Module), а так же представление (View), которое отобразите в конcоли (Shell))

Приготовимся

В данной статье нам понадобятся следующие сборки из комплекта Composite Application Library и Unity Application Block:

  • Microsoft.Practices.Composite.dll
  • Microsoft.Practices.Composite.Presentation.dll
  • Microsoft.Practices.Composite.UnityExtensions.dll
  • Microsoft.Practices.ServiceLocation.dll
  • Microsoft.Practices.Unity.dll

Composite Application Library распространяется в виде исходных кодов, в связи с этим необходимо скомпилировать следующие сборки:

  • Microsoft.Practices.Composite.dll
  • Microsoft.Practices.Composite.Presentation.dll
  • Microsoft.Practices.Composite.UnityExtensions.dll

Для этого следует запустить исполняемый файл из комплекта

Desktop & Silverlight — Open Composite Application Library.bat

и сбилдить проект в Visual Studio, далее необходимые сборки можно найти в следующей каталоге

CAL\Silverlight\Composite.UnityExtensions\bin\Debug

Приступим

1. Создаём проект с приложением Shell

Для начала создадим Silverlight Application приложение, назовём его HelloWorld.Silverlight, так же не забудем добавить ASP.NET Web приложение для его хостинга. В результате должно получиться примерно следующее:

Dd458947.1153f195-a8e1-43e4-a307-877d6823e346(en-us,MSDN.10).png

Далее добавляем ссылки на необходимые нам сборки:

  • Microsoft.Practices.Composite.dll
  • Microsoft.Practices.Composite.Presentation.dll
  • Microsoft.Practices.Composite.UnityExtensions.dll
  • Microsoft.Practices.Unity.dll
  • Microsoft.Practices.ServiceLocation.dll

Далее нам необходимо создать консоль (Shell) нашего приложения, для этого переименуем Page.xaml в Shell.xaml, а так же изменим название класса в Shell.xaml.cs c Page на Shell.

Так же нам потребуется изменить файл Shell.xaml:

  1. <UserControl x:Class="HelloWorld.Silverlight.Shell"
  2.     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;
  3.     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml&quot;
  4.     Width="400" Height="300">
  5.     <Grid x:Name="LayoutRoot" Background="White">
  6.  
  7.     </Grid>
  8. </UserControl>

* This source code was highlighted with Source Code Highlighter.

Далее нам необходимо узнать, что такое регион (region) и как мы его будем использовать.

Регион (Region) – концептуальный механизм, используемый разработчиками для отображения представлений (view) в определенном месте контрола, а так же для динамической подмены представлений (view).

В качестве хостинга для региона (region) могут использоваться следующие контролы:

  • System.Windows.Controls.ContentControl
  • System.Windows.Controls.ItemsControl
  • System.Windows.Controls.Primitives.Selector
  • System.Windows.Controls.TabControl

Подробнее о регионах (region) можно прочитать по ссылке http://msdn.microsoft.com/en-us/library/dd458944(printer).aspx

Для того, чтобы добавить регион в нашу консоль, мы будем использовать ItemsControl. В Shell.xaml добавим ссылку на пространство имён

  1. xmlns:Regions="clr-namespace:Microsoft.Practices.Composite.Presentation.Regions;assembly=Microsoft.Practices.Composite.Presentation"

* This source code was highlighted with Source Code Highlighter.

а так же добавим контрол ItemsControl

  1. <UserControl x:Class="HelloWorld.Silverlight.Shell"
  2.     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;
  3.     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml&quot;
  4.              xmlns:Regions="clr-namespace:Microsoft.Practices.Composite.Presentation.Regions;assembly=Microsoft.Practices.Composite.Presentation"
  5.              Width="400" Height="300">
  6.     <ItemsControl Name="MainRegion"/>
  7. </UserControl>

* This source code was highlighted with Source Code Highlighter.

так же добавим ему атрибут, указывающий RegionManager на текущий регион по имени “MainRegion”

  1. <ItemsControl Name="MainRegion" Regions:RegionManager.RegionName="MainRegion"/>

* This source code was highlighted with Source Code Highlighter.

Bootstrapper

Bootstrapper – механизм для компоновки компонентов нашего приложения.

Мы создадим свой класс bootstrapper на основе присутствующего в Composite Application Library абстрактного класса UnityBootstrapper, который инициализирует компоненты с помощью контейнера Unity, для этого добавим файл Bootstrapper.cs к нашему проекту и определим наследование:

  1. class Bootstrapper : UnityBootstrapper
  2. {
  3. }

* This source code was highlighted with Source Code Highlighter.

Так же переопределим метод создания консоли CreateShell:

  1. protected override DependencyObject CreateShell()
  2. {
  3.     Shell shell = Container.Resolve<Shell>();
  4.     Application.Current.RootVisual = shell;
  5.     return shell;
  6. }

* This source code was highlighted with Source Code Highlighter.

и определение каталога модулей:

  1. protected override IModuleCatalog GetModuleCatalog()
  2. {
  3.     ModuleCatalog catalog = new ModuleCatalog();
  4.     return catalog;
  5. }

* This source code was highlighted with Source Code Highlighter.

Так же необходимо провести инициализацию bootstrapper’а:

  1. private void Application_Startup(object sender, StartupEventArgs e)
  2. {
  3.     Bootstrapper bootstrapper= new Bootstrapper();
  4.     bootstrapper.Run();
  5. }

* This source code was highlighted with Source Code Highlighter.

Можно запустить проект и проверить.

2. Добавляем модуль (Module)

Module – функциональная, слабо связанная единица, предназначенная для комбинации в приложении.

Для этого нам необходимо добавить проект типа Silverlight Class Library и назвать его HelloWorldModule:

image

Добавляем ссылки на сборки:

  • Microsoft.Practices.Composite.dll
  • Microsoft.Practices.Composite.Presentation.dll

Переименовывем класс Class1 в HelloWorldModule и наследуем его от интерфейса Microsoft.Practices.Composite.Modularity.IModule:

  1. public class HelloWorldModule : IModule
  2. {
  3.  public void Initialize() {}
  4. }

* This source code was highlighted with Source Code Highlighter.

Далее на необходимо зарегистрировать модуль в каталоге нашего Bootstrapper класса, немного изменив метод GetModuleCatalog:

  1. protected override IModuleCatalog GetModuleCatalog()
  2. {
  3.   ModuleCatalog catalog = new ModuleCatalog()
  4.       .AddModule(typeof(HelloWorldModule.HelloWorldModule));
  5.   return catalog;
  6. }

* This source code was highlighted with Source Code Highlighter.

3. Добавляем представление (View)

Создадим в проекте нашего HelloWorldModule модуля папочку Views  и добавим к нему Silverlight User Control под названием HelloWorldView, который будет нашим представлением. Немного подправим HelloWorldView.xaml:

  1. <UserControl x:Class="HelloWorldModule.Views.HelloWorldView"
  2.   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;
  3.   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml&quot;>
  4.   <Grid x:Name="LayoutRoot" Background="White">
  5. <TextBlock Text="Hello World" Foreground="Green" HorizontalAlignment="Center" VerticalAlignment="Center" FontFamily="Calibri" FontSize="24" FontWeight="Bold"></TextBlock>
  6.   </Grid>
  7. </UserControl>

* This source code was highlighted with Source Code Highlighter.

Region Manager – сервис для несвязанного сопоставления (только с помощью указания имён) представления и региона.

Добавим его в конструктор класса нашего модуля HelloWorldModule через dependency injection и сохраним в поле regionManager:

  1. public HelloWorldModule(IRegionManager regionManager)
  2. {
  3.  this.regionManager = regionManager;
  4. }

* This source code was highlighted with Source Code Highlighter.

Так же зарегистрируем представление в регионе:

  1. public void Initialize()
  2. {
  3.   regionManager.RegisterViewWithRegion("MainRegion", typeof(Views.HelloWorldView));
  4. }

* This source code was highlighted with Source Code Highlighter.

Ну вот вроде и всё. Теперь можно запустить наше приложение:

image

В заключение

Итак, в этой статье вы узнали основы того, что содержится в Composite Application Guidance, а так же научитесь создавать составные Silverlight приложения на основе Composite Application Library (создадили загружаемый модуль (Module), а так же представление (View), которое отображается в конcоли (Shell)). Всё как и было обещано.

Источники

  1. Перед вами был слегка вольный и неполный перевод статьи из Patterns&Practices “Composite Application Guidance for WPF and Silverlight — February 2009”
    Silverlight Hands-On Lab: Getting Started with the Composite Application Library найти её можно по адресу http://msdn.microsoft.com/en-us/library/dd458947(printer).aspx
  2. Скачать руководство и сорцы можно с http://www.codeplex.com/CompositeWPF/
Advertisements

3 комментария on “Практикум Silverlight: Начинаем работать с Composite Application Library”

  1. Практикум Silverlight: Начинаем работать с Composite Application Library…

    Thank you for submitting this cool story — Trackback from progg.ru…

  2. sem:

    Спасибо за статью на русском, как раз собираюсь применить Composite Application Library в своей программе, правда с WPF, а не Silvertlight.

  3. Kukushka:

    Спасибо за статью. У меня возник вопрос по Silverlight т.к. проблем с этим не возникает в WPF. Расскажу в чем проблема создаем Sileverlight приложение основанное на Web Application создаем один модуль который перекроет все основное окно (Shell) и в этом модуле будет только один ListBox заполнений 20 в Shell.xaml пишем для установки нашего модуля. Запускаем и получается что ListBox не разтянулся на площадь всего модуля. Если же в Shell.xaml то при сжатии окна не появляется прокрутка Item`мов. Что делать?


Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s