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