Для кого эта статья
Данный пост будет интересен для вас если:
- Вы нацелены на развитие
- Вы работаете с RIA средой, такой как Silverlight (так же WPF)
- Если вы уже где-то слышали такие слова как Composite Application Guidance, Composite Application Library
- Вы заинтересовались статьей Павла Ивченкова “Создание приложения на WPF с использованием принципов TDD”
- Вам было интересно прочитать статью Acerv “Use 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 приложение для его хостинга. В результате должно получиться примерно следующее:
.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:
- <UserControl x:Class="HelloWorld.Silverlight.Shell"
- xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
- xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
- Width="400" Height="300">
- <Grid x:Name="LayoutRoot" Background="White">
-
- </Grid>
- </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 добавим ссылку на пространство имён
- xmlns:Regions="clr-namespace:Microsoft.Practices.Composite.Presentation.Regions;assembly=Microsoft.Practices.Composite.Presentation"
* This source code was highlighted with Source Code Highlighter.
а так же добавим контрол ItemsControl
- <UserControl x:Class="HelloWorld.Silverlight.Shell"
- xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
- xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
- xmlns:Regions="clr-namespace:Microsoft.Practices.Composite.Presentation.Regions;assembly=Microsoft.Practices.Composite.Presentation"
- Width="400" Height="300">
- <ItemsControl Name="MainRegion"/>
- </UserControl>
* This source code was highlighted with Source Code Highlighter.
так же добавим ему атрибут, указывающий RegionManager на текущий регион по имени “MainRegion”
- <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 к нашему проекту и определим наследование:
- class Bootstrapper : UnityBootstrapper
- {
- }
* This source code was highlighted with Source Code Highlighter.
Так же переопределим метод создания консоли CreateShell:
- protected override DependencyObject CreateShell()
- {
- Shell shell = Container.Resolve<Shell>();
- Application.Current.RootVisual = shell;
- return shell;
- }
* This source code was highlighted with Source Code Highlighter.
и определение каталога модулей:
- protected override IModuleCatalog GetModuleCatalog()
- {
- ModuleCatalog catalog = new ModuleCatalog();
- return catalog;
- }
* This source code was highlighted with Source Code Highlighter.
Так же необходимо провести инициализацию bootstrapper’а:
- private void Application_Startup(object sender, StartupEventArgs e)
- {
- Bootstrapper bootstrapper= new Bootstrapper();
- bootstrapper.Run();
- }
* This source code was highlighted with Source Code Highlighter.
Можно запустить проект и проверить.
2. Добавляем модуль (Module)
Module – функциональная, слабо связанная единица, предназначенная для комбинации в приложении.
Для этого нам необходимо добавить проект типа Silverlight Class Library и назвать его HelloWorldModule:
.png)
Добавляем ссылки на сборки:
- Microsoft.Practices.Composite.dll
- Microsoft.Practices.Composite.Presentation.dll
Переименовывем класс Class1 в HelloWorldModule и наследуем его от интерфейса Microsoft.Practices.Composite.Modularity.IModule:
- public class HelloWorldModule : IModule
- {
- public void Initialize() {}
- }
* This source code was highlighted with Source Code Highlighter.
Далее на необходимо зарегистрировать модуль в каталоге нашего Bootstrapper класса, немного изменив метод GetModuleCatalog:
- protected override IModuleCatalog GetModuleCatalog()
- {
- ModuleCatalog catalog = new ModuleCatalog()
- .AddModule(typeof(HelloWorldModule.HelloWorldModule));
- return catalog;
- }
* This source code was highlighted with Source Code Highlighter.
3. Добавляем представление (View)
Создадим в проекте нашего HelloWorldModule модуля папочку Views и добавим к нему Silverlight User Control под названием HelloWorldView, который будет нашим представлением. Немного подправим HelloWorldView.xaml:
- <UserControl x:Class="HelloWorldModule.Views.HelloWorldView"
- xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
- xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
- <Grid x:Name="LayoutRoot" Background="White">
- <TextBlock Text="Hello World" Foreground="Green" HorizontalAlignment="Center" VerticalAlignment="Center" FontFamily="Calibri" FontSize="24" FontWeight="Bold"></TextBlock>
- </Grid>
- </UserControl>
* This source code was highlighted with Source Code Highlighter.
Region Manager – сервис для несвязанного сопоставления (только с помощью указания имён) представления и региона.
Добавим его в конструктор класса нашего модуля HelloWorldModule через dependency injection и сохраним в поле regionManager:
- public HelloWorldModule(IRegionManager regionManager)
- {
- this.regionManager = regionManager;
- }
* This source code was highlighted with Source Code Highlighter.
Так же зарегистрируем представление в регионе:
- public void Initialize()
- {
- regionManager.RegisterViewWithRegion("MainRegion", typeof(Views.HelloWorldView));
- }
* This source code was highlighted with Source Code Highlighter.
Ну вот вроде и всё. Теперь можно запустить наше приложение:
.png)
В заключение
Итак, в этой статье вы узнали основы того, что содержится в Composite Application Guidance, а так же научитесь создавать составные Silverlight приложения на основе Composite Application Library (создадили загружаемый модуль (Module), а так же представление (View), которое отображается в конcоли (Shell)). Всё как и было обещано.
Источники
- Перед вами был слегка вольный и неполный перевод статьи из 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 - Скачать руководство и сорцы можно с http://www.codeplex.com/CompositeWPF/