diff 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
line wrap: on
line diff
--- a/Implab.ServiceHost/docs/XmlConfiguration.md	Fri May 25 19:15:26 2018 +0300
+++ b/Implab.ServiceHost/docs/XmlConfiguration.md	Fri Jun 01 21:35:24 2018 +0300
@@ -1,51 +1,64 @@
 # XML Конфигурация IoC контейнера
 
-Данная библиоетка создавалась для загрузки и применения конфигурации к IoC контейнеру, она не предназначена для конфигурирования
+Библиоетка создавалась для загрузки и применения конфигурации к IoC контейнеру, она не предназначена для конфигурирования
 контейнера во время выполнения, большинство контейнеров уже обладают данным функционалом.
 
 На данный момент поддерживается единственный вид контейнера - [Unity Container](https://unitycontainer.github.io/)
 
-Unity уже обладает средствами загрузки конфигурации из XML, данная библиотека позволяет решать следующие задачи
+Unity уже обладает средствами загрузки конфигурации из XML, данная библиотека реализует аналогичный функционал, кроме того, позволяет решать следующие задачи:
 
 - Конфигурация является простым Xml документом, который можно получить из любого источика и не ограничивается `.config` файлами приложения
 - Включение существующе конфигурации `<include href='config.xml'/>` в текущую
 - Поддержка сериализованных объектов в качестве регистраций сервисов и параметров
-- Описание зависимостей может быть расширено собсвтенными элементами с произвольной структурой
-- Поддержка специфиакции генериков любой вложенности `Dictionary{Foo,Bar{Int32}}`
+- Поддержка специфиакции генериков любой вложенности, например `Dictionary{Foo,Bar{Int32}}`
+- Поддержка фабрик в XML конфигурации
+- Расширение схемы XML конфигурации собственными элементами
 
 ## Общая архитектура
 
-`Implab.ServiceHost.Unity` содержит в себе классы для загрузки и применения XML конфигурации к IoC контейнеру, в частности к Unity.
+Пространство имен `Implab.ServiceHost.Unity` содержит в себе классы для загрузки и применения XML конфигурации к IoC контейнеру.
+
+Применение конфигурации к контейнеру состоит из следующих основных шагов:
 
-1. Настраивается схема `ContainerConfigurationSchema`
+1. Настраивается схема `ContainerConfigurationSchema` XML конфигурации контейнера
 2. Загружается документ и десереализуется в виде `ContainerElement`
-3. Создается `ContainerBuilder` при помощи которого применяются настройки из `ContainerElement`
+3. Создается `ContainerBuilder` при помощи которого применяются настройки из `ContainerElement` к контейнеру
 
-`ContainerConfigurationSchema` - определяет элементы которые могут быть использованы в конфигурации контейнера, предоставляет настроенный `XmlSerializer`.
+Схема `ContainerConfigurationSchema` определяет элементы документа, которые могут быть использованы в конфигурации контейнера, позволяет создать `XmlSerializer`, который используется для загрузки конфигурации.
 
-`ContainerBuilder` - основной класс, который используется для применения конфигурации к контейнеру, добавляет записи регистрации сервисов.
+`ContainerBuilder` - основной класс, который используется для применения конфигурации к контейнеру, он добавляет записи регистрации сервисов из конфигурации в контейнер.
 
-`ContainerElement` - Корневой элемент конфигурации, который загружается из документа.
+`ContainerElement` - Конфигурация контейнера, которая загружается из документа, состоит из директив для `ContainerBuilder`, а также из записей регистрации сервисов.
 
-Классы заканчивающиеся словом `Builder` используются для применения конфигурации к контейнеру,
-классы заканчивающиеся на `Element` содержат информацию о конфигурации и десериализуются из исходного документа.
+В библиотеки приняты следующие правила именования классов:
+
+- `***Builder` используются для применения конфигурации к контейнеру,
+- `***Element` содержат информацию о конфигурации и десериализуются из исходного документа.
 
 ## Структура конфигурации контейнера
 
-Элемент верхнего уровня всегда `ContainerElemnt`, он используется для хранения набора элеметов, которые распознаются и выполняются `ContainerBuilder`.
+Элемент верхнего уровня всегда `container`, он используется для хранения набора элеметов, которые распознаются и выполняются `ContainerBuilder`.
 
 Все элементы, входящие в контейнер наследуются от абстрактного класса `ContainerItemElement`,
 который позволяет получить текущий `ContainerBuilder` и выполнить над ним какие-либо действия.
 
-Примерами элементов контейнера могут быть
+Основные элементы конфигурации контенейра
 
 - `<include href='config.xml'/>` - включение конфигурации из указанного места
 - `<namespace name='My.App'/>` - добавление пространства имен для поиска типов
 - `<register type='MyGenericType{}'/>` - добавление в контейнер регистрации типа ``My.App.MyGenericType`1``
+- `<factory type='IFactory{Foo}' mapTo ='MyFactory'/>` - фабрика, регистрирует свой тип, а также тип `Foo`
+- `<serialized />` - сериализованный экземпляр объекта, использует `XmlSerializer` для десериализации
+- `<value />` - значение объекта в виде строки, используется для простых типов
 
 Полный набор элементов, доступных для использования в контейнере определяет схема `ContainerConfigurationSchema`,
 разработчик может расширить контейнер совими собственными элементами зарегистрировав их в схеме.
 
+### register
+

+
+
 Например, мы используем компоненту `MyHttpClient` для загрузки данных
 
 ```xml