Mercurial > pub > ImplabNet
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"> |