comparison Implab.ServiceHost/docs/XmlConfiguration.md @ 281:e0916ddc9950 v3 tip

code cleanup and refactoring
author cin
date Fri, 01 Jun 2018 21:35:24 +0300
parents 963b17c275be
children
comparison
equal deleted inserted replaced
280:f07be402ab02 281:e0916ddc9950
1 # XML Конфигурация IoC контейнера 1 # XML Конфигурация IoC контейнера
2 2
3 Данная библиоетка создавалась для загрузки и применения конфигурации к IoC контейнеру, она не предназначена для конфигурирования 3 Библиоетка создавалась для загрузки и применения конфигурации к IoC контейнеру, она не предназначена для конфигурирования
4 контейнера во время выполнения, большинство контейнеров уже обладают данным функционалом. 4 контейнера во время выполнения, большинство контейнеров уже обладают данным функционалом.
5 5
6 На данный момент поддерживается единственный вид контейнера - [Unity Container](https://unitycontainer.github.io/) 6 На данный момент поддерживается единственный вид контейнера - [Unity Container](https://unitycontainer.github.io/)
7 7
8 Unity уже обладает средствами загрузки конфигурации из XML, данная библиотека позволяет решать следующие задачи 8 Unity уже обладает средствами загрузки конфигурации из XML, данная библиотека реализует аналогичный функционал, кроме того, позволяет решать следующие задачи:
9 9
10 - Конфигурация является простым Xml документом, который можно получить из любого источика и не ограничивается `.config` файлами приложения 10 - Конфигурация является простым Xml документом, который можно получить из любого источика и не ограничивается `.config` файлами приложения
11 - Включение существующе конфигурации `<include href='config.xml'/>` в текущую 11 - Включение существующе конфигурации `<include href='config.xml'/>` в текущую
12 - Поддержка сериализованных объектов в качестве регистраций сервисов и параметров 12 - Поддержка сериализованных объектов в качестве регистраций сервисов и параметров
13 - Описание зависимостей может быть расширено собсвтенными элементами с произвольной структурой 13 - Поддержка специфиакции генериков любой вложенности, например `Dictionary{Foo,Bar{Int32}}`
14 - Поддержка специфиакции генериков любой вложенности `Dictionary{Foo,Bar{Int32}}` 14 - Поддержка фабрик в XML конфигурации
15 - Расширение схемы XML конфигурации собственными элементами
15 16
16 ## Общая архитектура 17 ## Общая архитектура
17 18
18 `Implab.ServiceHost.Unity` содержит в себе классы для загрузки и применения XML конфигурации к IoC контейнеру, в частности к Unity. 19 Пространство имен `Implab.ServiceHost.Unity` содержит в себе классы для загрузки и применения XML конфигурации к IoC контейнеру.
19 20
20 1. Настраивается схема `ContainerConfigurationSchema` 21 Применение конфигурации к контейнеру состоит из следующих основных шагов:
22
23 1. Настраивается схема `ContainerConfigurationSchema` XML конфигурации контейнера
21 2. Загружается документ и десереализуется в виде `ContainerElement` 24 2. Загружается документ и десереализуется в виде `ContainerElement`
22 3. Создается `ContainerBuilder` при помощи которого применяются настройки из `ContainerElement` 25 3. Создается `ContainerBuilder` при помощи которого применяются настройки из `ContainerElement` к контейнеру
23 26
24 `ContainerConfigurationSchema` - определяет элементы которые могут быть использованы в конфигурации контейнера, предоставляет настроенный `XmlSerializer`. 27 Схема `ContainerConfigurationSchema` определяет элементы документа, которые могут быть использованы в конфигурации контейнера, позволяет создать `XmlSerializer`, который используется для загрузки конфигурации.
25 28
26 `ContainerBuilder` - основной класс, который используется для применения конфигурации к контейнеру, добавляет записи регистрации сервисов. 29 `ContainerBuilder` - основной класс, который используется для применения конфигурации к контейнеру, он добавляет записи регистрации сервисов из конфигурации в контейнер.
27 30
28 `ContainerElement` - Корневой элемент конфигурации, который загружается из документа. 31 `ContainerElement` - Конфигурация контейнера, которая загружается из документа, состоит из директив для `ContainerBuilder`, а также из записей регистрации сервисов.
29 32
30 Классы заканчивающиеся словом `Builder` используются для применения конфигурации к контейнеру, 33 В библиотеки приняты следующие правила именования классов:
31 классы заканчивающиеся на `Element` содержат информацию о конфигурации и десериализуются из исходного документа. 34
35 - `***Builder` используются для применения конфигурации к контейнеру,
36 - `***Element` содержат информацию о конфигурации и десериализуются из исходного документа.
32 37
33 ## Структура конфигурации контейнера 38 ## Структура конфигурации контейнера
34 39
35 Элемент верхнего уровня всегда `ContainerElemnt`, он используется для хранения набора элеметов, которые распознаются и выполняются `ContainerBuilder`. 40 Элемент верхнего уровня всегда `container`, он используется для хранения набора элеметов, которые распознаются и выполняются `ContainerBuilder`.
36 41
37 Все элементы, входящие в контейнер наследуются от абстрактного класса `ContainerItemElement`, 42 Все элементы, входящие в контейнер наследуются от абстрактного класса `ContainerItemElement`,
38 который позволяет получить текущий `ContainerBuilder` и выполнить над ним какие-либо действия. 43 который позволяет получить текущий `ContainerBuilder` и выполнить над ним какие-либо действия.
39 44
40 Примерами элементов контейнера могут быть 45 Основные элементы конфигурации контенейра
41 46
42 - `<include href='config.xml'/>` - включение конфигурации из указанного места 47 - `<include href='config.xml'/>` - включение конфигурации из указанного места
43 - `<namespace name='My.App'/>` - добавление пространства имен для поиска типов 48 - `<namespace name='My.App'/>` - добавление пространства имен для поиска типов
44 - `<register type='MyGenericType{}'/>` - добавление в контейнер регистрации типа ``My.App.MyGenericType`1`` 49 - `<register type='MyGenericType{}'/>` - добавление в контейнер регистрации типа ``My.App.MyGenericType`1``
50 - `<factory type='IFactory{Foo}' mapTo ='MyFactory'/>` - фабрика, регистрирует свой тип, а также тип `Foo`
51 - `<serialized />` - сериализованный экземпляр объекта, использует `XmlSerializer` для десериализации
52 - `<value />` - значение объекта в виде строки, используется для простых типов
45 53
46 Полный набор элементов, доступных для использования в контейнере определяет схема `ContainerConfigurationSchema`, 54 Полный набор элементов, доступных для использования в контейнере определяет схема `ContainerConfigurationSchema`,
47 разработчик может расширить контейнер совими собственными элементами зарегистрировав их в схеме. 55 разработчик может расширить контейнер совими собственными элементами зарегистрировав их в схеме.
56
57 ### register
58
59 О
60
48 61
49 Например, мы используем компоненту `MyHttpClient` для загрузки данных 62 Например, мы используем компоненту `MyHttpClient` для загрузки данных
50 63
51 ```xml 64 ```xml
52 <register type="IClient" mapTo="MyHttpClient"> 65 <register type="IClient" mapTo="MyHttpClient">