Изменения документа Внедрение зависимостей в .NET | Марк Симан
Редактировал(а) Alexandr Fokin 2024/10/02 10:51
<
>
отредактировано Alexandr Fokin
на 2020/02/12 13:13
на 2020/02/12 13:13
отредактировано Alexandr Fokin
на 2024/01/04 19:22
на 2024/01/04 19:22
Изменить комментарий:
К данной версии нет комментариев
Комментарий
-
Свойства страницы (1 изменено, 0 добавлено, 0 удалено)
Подробности
- Свойства страницы
-
- Содержимое
-
... ... @@ -1,405 +1,403 @@ 1 - 2 -[[image:DI IOC.jpg]] 3 - 4 -В данной книге рассматриваются концепции DI и IOC. А также приводяться примеры взаимодействия с framework IOC контейнерами. 5 -Приводяться примеры паттернов и антипаттрновэ. 1 +| |В данной книге рассматриваются концепции DI и IOC. А также приводятся примеры взаимодействия с framework IOC контейнерами. 2 +Приводятся примеры паттернов и анти-паттернов. 6 6 Управление жизненным циклом зависимостей. 4 +| |((( 5 +|(% style="width:363px" %)Преобразование абстракций в конкретные типы 6 +(Процесс разрешения)|(% style="width:1087px" %)((( 7 + [[image:DI IOC.jpg]] 7 7 8 -**Преобразование абстракций в конкретные типы (Процесс разрешения)** 9 +* DI - процесс внедрения типов при создании экземпляров. 10 +* Poor man DI - ручное явное внедрение без использования DI(IOC) контейнера. 11 +* DI(IOC) контейнер - инструмент позволяющий производить внедрение типов автоматически на основе некоторого, сконфигурированного пользователем, маппинга (абстракция -> тип) 12 +* IOC подразумевает наличие библиотеки или фреймворка, контролирующего часть жизненного цикла приложения и предоставляющий интерфейс для реализации некоторый логики в рамках жизненного цикла разработчику. 13 +))) 14 +|(% style="width:363px" %)Типы внедрений:|(% style="width:1087px" %)((( 15 +* Внедрение в конструктор (обязательное) 16 +* Внедрение в свойство (необязательное, предполагает возможность наличия значения по умолчанию) 17 +* Внедрение в метод (внедрение при вызове метода) 18 +* Фабрика 19 +))) 20 +|(% style="width:363px" %) |(% style="width:1087px" %) 21 +))) 22 +| |{{html}}<ul> 23 + 9 9 10 - DI-процессвнедрения типов при сохдании экземпляров.11 - PoormanDI-ручноеявное внедрениебезпользования DI(IOC) контейнера.12 - DI(IOC)контейнер-инструментпозволяющийпроизводить внедрение типов автоматически на основе некоторого, сконфигурированного пользователем, маппиинга (абстракция ->тип)13 - IOCподразумеваетналичиебиблиотекиили фреймворка, контролирующего часть жизненного цикла приложения и предоставляющий интерфейс для реализации некоторый логики в рамках жизненного цикла разработчику.25 + <li class=" "> 26 + <span class="have-child "><a href="https://smarly.net/dependency-injection-in-net/putting-dependency-injection-on-the-map" class="bgg">Появление механизма внедрения зависимостей</a></span> 27 + <ul style="display: block;"> 28 + 14 14 30 + <li class=" "> 31 + <span class="have-child "><a href="https://smarly.net/dependency-injection-in-net/putting-dependency-injection-on-the-map/a-dependency-injection-tasting-menu" class="bgg">1. "Дегустационное меню" механизма внедрения зависимостей</a></span> 32 + <ul style="display: block;"> 33 + 15 15 16 -Типы внедрений: 17 -Внедрение в конструктор (обязательное) 18 -Внедрение в свойство (необязательное, предполагает возможность наличия значеняи по умолчанию) 19 -Внедрение в метод (внедрение при вызове метода) 35 + <li class=" no-child"> 36 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/putting-dependency-injection-on-the-map/a-dependency-injection-tasting-menu/writing-maintainable-code" class="bgg">1.1. Написание поддерживаемого кода</a></span> 37 + </li> 38 + <li class=" no-child"> 39 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/putting-dependency-injection-on-the-map/a-dependency-injection-tasting-menu/hello-di" class="bgg">1.2. Привет DI</a></span> 40 + </li> 41 + <li class=" no-child"> 42 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/putting-dependency-injection-on-the-map/a-dependency-injection-tasting-menu/what-to-inject-and-what-not-to-inject" class="bgg">1.3. Что внедрять, а что не внедрять</a></span> 43 + </li> 44 + <li class=" no-child"> 45 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/putting-dependency-injection-on-the-map/a-dependency-injection-tasting-menu/di-scope" class="bgg">1.4. Область применения DI</a></span> 46 + </li> 47 + <li class=" no-child"> 48 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/putting-dependency-injection-on-the-map/a-dependency-injection-tasting-menu/summary" class="bgg">1.5. Резюме</a></span> 49 + </li> 20 20 21 -{{html}} 22 -<ul> 23 - 51 + </ul> 52 + </li> 53 + <li class=" "> 54 + <span class="have-child "><a href="https://smarly.net/dependency-injection-in-net/putting-dependency-injection-on-the-map/a-comprehensive-example" class="bgg">2. Комплексный пример</a></span> 55 + <ul> 56 + 24 24 25 - <li class=" "> 26 - <span class="have-child "><a href="https://smarly.net/dependency-injection-in-net/putting-dependency-injection-on-the-map" class="bgg">Появление механизма внедрения зависимостей</a></span> 27 - <ul style="display: block;"> 28 - 58 + <li class=" no-child"> 59 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/putting-dependency-injection-on-the-map/a-comprehensive-example/doing-it-wrong" class="bgg">2.1. Как не стоит поступать</a></span> 60 + </li> 61 + <li class=" no-child"> 62 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/putting-dependency-injection-on-the-map/a-comprehensive-example/doing-it-right" class="bgg">2.2. Как действовать правильно</a></span> 63 + </li> 64 + <li class=" no-child"> 65 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/putting-dependency-injection-on-the-map/a-comprehensive-example/expanding-the-sample-application" class="bgg">2.3. Расширение шаблонного приложения</a></span> 66 + </li> 67 + <li class=" no-child"> 68 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/putting-dependency-injection-on-the-map/a-comprehensive-example/summary" class="bgg">2.4. Резюме</a></span> 69 + </li> 29 29 30 - <li class=" "> 31 - <span class="have-child "><a href="https://smarly.net/dependency-injection-in-net/putting-dependency-injection-on-the-map/a-dependency-injection-tasting-menu" class="bgg">1. "Дегустационное меню" механизма внедрения зависимостей</a></span> 32 - <ul style="display: block;"> 33 - 71 + </ul> 72 + </li> 73 + <li class=" "> 74 + <span class="have-child "><a href="https://smarly.net/dependency-injection-in-net/putting-dependency-injection-on-the-map/di-containers" class="bgg">3. DI-контейнеры</a></span> 75 + <ul> 76 + 34 34 35 - 36 - a-dependency-injection-tasting-menu/writing-maintainable-code" class="bgg">1.1.Написание поддерживаемогокода</a></span>37 - 38 - 39 - a-dependency-injection-tasting-menu/hello-di" class="bgg">1.2.ПриветDI</a></span>40 - 41 - 42 - a-dependency-injection-tasting-menu/what-to-inject-and-what-not-to-inject" class="bgg">1.3.Что внедрять,а чтовнедрять</a></span>43 - 44 - 45 - a-dependency-injection-tasting-menu/di-scope" class="bgg">1.4.ОбластьпримененияDI</a></span>46 - 47 - 48 - a-dependency-injection-tasting-menu/summary" class="bgg">1.5. Резюме</a></span>49 - 78 + <li class=" no-child"> 79 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/putting-dependency-injection-on-the-map/di-containers/introducing-di-containers" class="bgg">3.1. Знакомство с DI-контейнерами</a></span> 80 + </li> 81 + <li class=" no-child"> 82 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/putting-dependency-injection-on-the-map/di-containers/configuring-di-containers" class="bgg">3.2. Конфигурирование DI-контейнеров</a></span> 83 + </li> 84 + <li class=" no-child"> 85 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/putting-dependency-injection-on-the-map/di-containers/di-container-patterns" class="bgg">3.3. Паттерны DI-контейнеров</a></span> 86 + </li> 87 + <li class=" no-child"> 88 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/putting-dependency-injection-on-the-map/di-containers/di-container-landscape" class="bgg">3.4. Перспектива DI-контейнеров</a></span> 89 + </li> 90 + <li class=" no-child"> 91 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/putting-dependency-injection-on-the-map/di-containers/summary" class="bgg">3.5. Резюме</a></span> 92 + </li> 50 50 51 - </ul> 52 - </li> 53 - <li class=" "> 54 - <span class="have-child "><a href="https://smarly.net/dependency-injection-in-net/putting-dependency-injection-on-the-map/a-comprehensive-example" class="bgg">2. Комплексный пример</a></span> 55 - <ul> 56 - 94 + </ul> 95 + </li> 57 57 58 - <li class=" no-child"> 59 - <span class=""><a href="https://smarly.net/dependency-injection-in-net/putting-dependency-injection-on-the-map/a-comprehensive-example/doing-it-wrong" class="bgg">2.1. Как не стоит поступать</a></span> 60 - </li> 61 - <li class=" no-child"> 62 - <span class=""><a href="https://smarly.net/dependency-injection-in-net/putting-dependency-injection-on-the-map/a-comprehensive-example/doing-it-right" class="bgg">2.2. Как действовать правильно</a></span> 63 - </li> 64 - <li class=" no-child"> 65 - <span class=""><a href="https://smarly.net/dependency-injection-in-net/putting-dependency-injection-on-the-map/a-comprehensive-example/expanding-the-sample-application" class="bgg">2.3. Расширение шаблонного приложения</a></span> 66 - </li> 67 - <li class=" no-child"> 68 - <span class=""><a href="https://smarly.net/dependency-injection-in-net/putting-dependency-injection-on-the-map/a-comprehensive-example/summary" class="bgg">2.4. Резюме</a></span> 69 - </li> 97 + </ul> 98 + </li> 99 + <li class=" "> 100 + <span class="have-child "><a href="https://smarly.net/dependency-injection-in-net/di-catalog" class="bgg">Каталог DI</a></span> 101 + <ul> 102 + 70 70 71 - </ul> 72 - </li> 73 - <li class=" "> 74 - <span class="have-child "><a href="https://smarly.net/dependency-injection-in-net/putting-dependency-injection-on-the-map/di-containers" class="bgg">3. DI-контейнеры</a></span> 75 - <ul> 76 - 104 + <li class=" "> 105 + <span class="have-child "><a href="https://smarly.net/dependency-injection-in-net/di-catalog/di-patterns" class="bgg">4. DI паттерны</a></span> 106 + <ul> 107 + 77 77 78 - 79 - putting-dependency-injection-on-the-map/di-containers/introducing-di-containers" class="bgg">3.1.ЗнакомствосDI-контейнерами</a></span>80 - 81 - 82 - putting-dependency-injection-on-the-map/di-containers/configuring-di-containers" class="bgg">3.2.КонфигурированиеDI-контейнеров</a></span>83 - 84 - 85 - putting-dependency-injection-on-the-map/di-containers/di-container-patterns" class="bgg">3.3.Паттерны DI-контейнеров</a></span>86 - 87 - 88 - putting-dependency-injection-on-the-map/di-containers/di-container-landscape" class="bgg">3.4.ПерспективаDI-контейнеров</a></span>89 - 90 - 91 - putting-dependency-injection-on-the-map/di-containers/summary" class="bgg">3.5. Резюме</a></span>92 - 109 + <li class=" no-child"> 110 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-catalog/di-patterns/constructor-injection" class="bgg">4.1. Внедрение в конструктор (Constructor Injection)</a></span> 111 + </li> 112 + <li class=" no-child"> 113 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-catalog/di-patterns/property-injection" class="bgg">4.2. Внедрение в свойство (Property Injection)</a></span> 114 + </li> 115 + <li class=" no-child"> 116 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-catalog/di-patterns/method-injection" class="bgg">4.3. Внедрение в метод (Method Injection)</a></span> 117 + </li> 118 + <li class=" no-child"> 119 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-catalog/di-patterns/ambient-context" class="bgg">4.4. Окружающий контекст (Ambient Context)</a></span> 120 + </li> 121 + <li class=" no-child"> 122 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-catalog/di-patterns/summary" class="bgg">4.5. Резюме</a></span> 123 + </li> 93 93 94 - </ul> 95 - </li> 125 + </ul> 126 + </li> 127 + <li class=" "> 128 + <span class="have-child "><a href="https://smarly.net/dependency-injection-in-net/di-catalog/di-anti-patterns" class="bgg">5. DI анти-паттерны</a></span> 129 + <ul> 130 + 96 96 97 - </ul> 98 - </li> 99 - <li class=" "> 100 - <span class="have-child "><a href="https://smarly.net/dependency-injection-in-net/di-catalog" class="bgg">Каталог DI</a></span> 101 - <ul> 102 - 132 + <li class=" no-child"> 133 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-catalog/di-anti-patterns/control-freak" class="bgg">5.1. Control Freak</a></span> 134 + </li> 135 + <li class=" no-child"> 136 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-catalog/di-anti-patterns/bastard-injection" class="bgg">5.2. Bastard Injection</a></span> 137 + </li> 138 + <li class=" no-child"> 139 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-catalog/di-anti-patterns/constrained-construction" class="bgg">5.3. Constrained Construction</a></span> 140 + </li> 141 + <li class=" no-child"> 142 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-catalog/di-anti-patterns/service-locator" class="bgg">5.4. Service Locator</a></span> 143 + </li> 144 + <li class=" no-child"> 145 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-catalog/di-anti-patterns/summary" class="bgg">5.5. Резюме</a></span> 146 + </li> 103 103 104 - <li class=" "> 105 - <span class="have-child "><a href="https://smarly.net/dependency-injection-in-net/di-catalog/di-patterns" class="bgg">4. DI паттерны</a></span> 106 - <ul> 107 - 148 + </ul> 149 + </li> 150 + <li class=" "> 151 + <span class="have-child "><a href="https://smarly.net/dependency-injection-in-net/di-catalog/di-refactorings" class="bgg">6. DI рефакторинг</a></span> 152 + <ul> 153 + 108 108 109 - <li class=" no-child"> 110 - <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-catalog/di-patterns/constructor-injection" class="bgg">4.1. Внедрение в конструктор (Constructor Injection)</a></span> 111 - </li> 112 - <li class=" no-child"> 113 - <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-catalog/di-patterns/property-injection" class="bgg">4.2. Внедрение в свойство (Property Injection)</a></span> 114 - </li> 115 - <li class=" no-child"> 116 - <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-catalog/di-patterns/method-injection" class="bgg">4.3. Внедрение в метод (Method Injection)</a></span> 117 - </li> 118 - <li class=" no-child"> 119 - <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-catalog/di-patterns/ambient-context" class="bgg">4.4. Окружающий контекст (Ambient Context)</a></span> 120 - </li> 121 - <li class=" no-child"> 122 - <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-catalog/di-patterns/summary" class="bgg">4.5. Резюме</a></span> 123 - </li> 155 + <li class=" no-child"> 156 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-catalog/di-refactorings/mapping-runtime-values-to-abstractions" class="bgg">6.1. Преобразование динамических значений в абстракции</a></span> 157 + </li> 158 + <li class=" no-child"> 159 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-catalog/di-refactorings/working-with-short-lived-dependencies" class="bgg">6.2. Работа с недолговечными зависимостями</a></span> 160 + </li> 161 + <li class=" no-child"> 162 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-catalog/di-refactorings/resolving-cyclic-dependencies" class="bgg">6.3. Разрешение циклических зависимостей</a></span> 163 + </li> 164 + <li class=" no-child"> 165 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-catalog/di-refactorings/dealing-with-constructor-over-injection" class="bgg">6.4. Обсуждение феномена Constructor Over-injection</a></span> 166 + </li> 167 + <li class=" no-child"> 168 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-catalog/di-refactorings/monitoring-coupling" class="bgg">6.5. Мониторинг связывания</a></span> 169 + </li> 170 + <li class=" no-child"> 171 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-catalog/di-refactorings/summary" class="bgg">6.6. Резюме</a></span> 172 + </li> 124 124 125 - </ul> 126 - </li> 127 - <li class=" "> 128 - <span class="have-child "><a href="https://smarly.net/dependency-injection-in-net/di-catalog/di-anti-patterns" class="bgg">5. DI анти-паттерны</a></span> 129 - <ul> 130 - 174 + </ul> 175 + </li> 131 131 132 - <li class=" no-child"> 133 - <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-catalog/di-anti-patterns/control-freak" class="bgg">5.1. Control Freak</a></span> 134 - </li> 135 - <li class=" no-child"> 136 - <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-catalog/di-anti-patterns/bastard-injection" class="bgg">5.2. Bastard Injection</a></span> 137 - </li> 138 - <li class=" no-child"> 139 - <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-catalog/di-anti-patterns/constrained-construction" class="bgg">5.3. Constrained Construction</a></span> 140 - </li> 141 - <li class=" no-child"> 142 - <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-catalog/di-anti-patterns/service-locator" class="bgg">5.4. Service Locator</a></span> 143 - </li> 144 - <li class=" no-child"> 145 - <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-catalog/di-anti-patterns/summary" class="bgg">5.5. Резюме</a></span> 146 - </li> 177 + </ul> 178 + </li> 179 + <li class=" "> 180 + <span class="have-child "><a href="https://smarly.net/dependency-injection-in-net/diy-di" class="bgg">DI самостоятельно</a></span> 181 + <ul> 182 + 147 147 148 - </ul> 149 - </li> 150 - <li class=" "> 151 - <span class="have-child "><a href="https://smarly.net/dependency-injection-in-net/di-catalog/di-refactorings" class="bgg">6. DI рефакторинг</a></span> 152 - <ul> 153 - 184 + <li class=" "> 185 + <span class="have-child "><a href="https://smarly.net/dependency-injection-in-net/diy-di/object-composition" class="bgg">7. Построение объектов</a></span> 186 + <ul> 187 + 154 154 155 - <li class=" no-child"> 156 - <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-catalog/di-refactorings/mapping-runtime-values-to-abstractions" class="bgg">6.1. Преобразование динамических значений в абстракции</a></span> 157 - </li> 158 - <li class=" no-child"> 159 - <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-catalog/di-refactorings/working-with-short-lived-dependencies" class="bgg">6.2. Работа с недолговечными зависимостями</a></span> 160 - </li> 161 - <li class=" no-child"> 162 - <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-catalog/di-refactorings/resolving-cyclic-dependencies" class="bgg">6.3. Разрешение циклических зависимостей</a></span> 163 - </li> 164 - <li class=" no-child"> 165 - <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-catalog/di-refactorings/dealing-with-constructor-over-injection" class="bgg">6.4. Обсуждение феномена Constructor Over-injection</a></span> 166 - </li> 167 - <li class=" no-child"> 168 - <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-catalog/di-refactorings/monitoring-coupling" class="bgg">6.5. Мониторинг связывания</a></span> 169 - </li> 170 - <li class=" no-child"> 171 - <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-catalog/di-refactorings/summary" class="bgg">6.6. Резюме</a></span> 172 - </li> 189 + <li class=" no-child"> 190 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/diy-di/object-composition/composing-console-applications" class="bgg">7.1. Построение консольных приложений</a></span> 191 + </li> 192 + <li class=" no-child"> 193 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/diy-di/object-composition/composing-asp-net-mvc-applications" class="bgg">7.2. Построение ASP.NET MVC приложений</a></span> 194 + </li> 195 + <li class=" no-child"> 196 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/diy-di/object-composition/composing-wcf-applications" class="bgg">7.3. Построение WCF приложений</a></span> 197 + </li> 198 + <li class=" no-child"> 199 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/diy-di/object-composition/composing-wpf-applications" class="bgg">7.4. Построение WPF приложений</a></span> 200 + </li> 201 + <li class=" no-child"> 202 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/diy-di/object-composition/composing-asp-net-applications" class="bgg">7.5. Построение ASP.NET приложений</a></span> 203 + </li> 204 + <li class=" no-child"> 205 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/diy-di/object-composition/composing-powershell-cmdlets" class="bgg">7.6. Построение PowerShell cmdlets</a></span> 206 + </li> 207 + <li class=" no-child"> 208 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/diy-di/object-composition/summary" class="bgg">7.7. Резюме</a></span> 209 + </li> 173 173 174 - </ul> 175 - </li> 211 + </ul> 212 + </li> 213 + <li class=" "> 214 + <span class="have-child "><a href="https://smarly.net/dependency-injection-in-net/diy-di/object-lifetime" class="bgg">8. Жизненный цикл объектов</a></span> 215 + <ul> 216 + 176 176 177 - </ul> 178 - </li> 179 - <li class=" "> 180 - <span class="have-child "><a href="https://smarly.net/dependency-injection-in-net/diy-di" class="bgg">DI самостоятельно</a></span> 181 - <ul> 182 - 218 + <li class=" no-child"> 219 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/diy-di/object-lifetime/managing-dependency-lifetime" class="bgg">8.1. Управление жизненным циклом зависимостей</a></span> 220 + </li> 221 + <li class=" no-child"> 222 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/diy-di/object-lifetime/working-with-disposable-dependencies" class="bgg">8.2. Работа с устраняемыми зависимостями</a></span> 223 + </li> 224 + <li class=" no-child"> 225 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/diy-di/object-lifetime/lifestyle-catalog" class="bgg">8.3. Каталог стилей существования объектов</a></span> 226 + </li> 227 + <li class=" no-child"> 228 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/diy-di/object-lifetime/summary" class="bgg">8.4. Резюме</a></span> 229 + </li> 183 183 184 - <li class=" "> 185 - <span class="have-child "><a href="https://smarly.net/dependency-injection-in-net/diy-di/object-composition" class="bgg">7. Построение объектов</a></span> 186 - <ul> 187 - 231 + </ul> 232 + </li> 233 + <li class=" "> 234 + <span class="have-child "><a href="https://smarly.net/dependency-injection-in-net/diy-di/interception" class="bgg">9. Механизм перехвата</a></span> 235 + <ul> 236 + 188 188 189 - <li class=" no-child"> 190 - <span class=""><a href="https://smarly.net/dependency-injection-in-net/diy-di/object-composition/composing-console-applications" class="bgg">7.1. Построение консольных приложений</a></span> 191 - </li> 192 - <li class=" no-child"> 193 - <span class=""><a href="https://smarly.net/dependency-injection-in-net/diy-di/object-composition/composing-asp-net-mvc-applications" class="bgg">7.2. Построение ASP.NET MVC приложений</a></span> 194 - </li> 195 - <li class=" no-child"> 196 - <span class=""><a href="https://smarly.net/dependency-injection-in-net/diy-di/object-composition/composing-wcf-applications" class="bgg">7.3. Построение WCF приложений</a></span> 197 - </li> 198 - <li class=" no-child"> 199 - <span class=""><a href="https://smarly.net/dependency-injection-in-net/diy-di/object-composition/composing-wpf-applications" class="bgg">7.4. Построение WPF приложений</a></span> 200 - </li> 201 - <li class=" no-child"> 202 - <span class=""><a href="https://smarly.net/dependency-injection-in-net/diy-di/object-composition/composing-asp-net-applications" class="bgg">7.5. Построение ASP.NET приложений</a></span> 203 - </li> 204 - <li class=" no-child"> 205 - <span class=""><a href="https://smarly.net/dependency-injection-in-net/diy-di/object-composition/composing-powershell-cmdlets" class="bgg">7.6. Построение PowerShell cmdlets</a></span> 206 - </li> 207 - <li class=" no-child"> 208 - <span class=""><a href="https://smarly.net/dependency-injection-in-net/diy-di/object-composition/summary" class="bgg">7.7. Резюме</a></span> 209 - </li> 238 + <li class=" no-child"> 239 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/diy-di/interception/introducing-interception" class="bgg">9.1. Знакомство с механизмом перехвата</a></span> 240 + </li> 241 + <li class=" no-child"> 242 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/diy-di/interception/implementing-cross-cutting-concerns" class="bgg">9.2. Реализация сквозных сущностей</a></span> 243 + </li> 244 + <li class=" no-child"> 245 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/diy-di/interception/declaring-aspects" class="bgg">9.3. Объявление аспектов</a></span> 246 + </li> 247 + <li class=" no-child"> 248 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/diy-di/interception/summary" class="bgg">9.4. Резюме</a></span> 249 + </li> 210 210 211 - </ul> 212 - </li> 213 - <li class=" "> 214 - <span class="have-child "><a href="https://smarly.net/dependency-injection-in-net/diy-di/object-lifetime" class="bgg">8. Жизненный цикл объектов</a></span> 215 - <ul> 216 - 251 + </ul> 252 + </li> 217 217 218 - <li class=" no-child"> 219 - <span class=""><a href="https://smarly.net/dependency-injection-in-net/diy-di/object-lifetime/managing-dependency-lifetime" class="bgg">8.1. Управление жизненным циклом зависимостей</a></span> 220 - </li> 221 - <li class=" no-child"> 222 - <span class=""><a href="https://smarly.net/dependency-injection-in-net/diy-di/object-lifetime/working-with-disposable-dependencies" class="bgg">8.2. Работа с устраняемыми зависимостями</a></span> 223 - </li> 224 - <li class=" no-child"> 225 - <span class=""><a href="https://smarly.net/dependency-injection-in-net/diy-di/object-lifetime/lifestyle-catalog" class="bgg">8.3. Каталог стилей существования объектов</a></span> 226 - </li> 227 - <li class=" no-child"> 228 - <span class=""><a href="https://smarly.net/dependency-injection-in-net/diy-di/object-lifetime/summary" class="bgg">8.4. Резюме</a></span> 229 - </li> 254 + </ul> 255 + </li> 256 + <li class=" "> 257 + <span class="have-child "><a href="https://smarly.net/dependency-injection-in-net/di-containers" class="bgg">DI-контейнеры</a></span> 258 + <ul> 259 + 230 230 231 - </ul> 232 - </li> 233 - <li class=" "> 234 - <span class="have-child "><a href="https://smarly.net/dependency-injection-in-net/diy-di/interception" class="bgg">9. Механизм перехвата</a></span> 235 - <ul> 236 - 261 + <li class=" "> 262 + <span class="have-child "><a href="https://smarly.net/dependency-injection-in-net/di-containers/castle-windsor" class="bgg">10. Castle Windsor</a></span> 263 + <ul> 264 + 237 237 238 - <li class=" no-child"> 239 - <span class=""><a href="https://smarly.net/dependency-injection-in-net/diy-di/interception/introducing-interception" class="bgg">9.1. Знакомство с механизмом перехвата</a></span> 240 - </li> 241 - <li class=" no-child"> 242 - <span class=""><a href="https://smarly.net/dependency-injection-in-net/diy-di/interception/implementing-cross-cutting-concerns" class="bgg">9.2. Реализация сквозных сущностей</a></span> 243 - </li> 244 - <li class=" no-child"> 245 - <span class=""><a href="https://smarly.net/dependency-injection-in-net/diy-di/interception/declaring-aspects" class="bgg">9.3. Объявление аспектов</a></span> 246 - </li> 247 - <li class=" no-child"> 248 - <span class=""><a href="https://smarly.net/dependency-injection-in-net/diy-di/interception/summary" class="bgg">9.4. Резюме</a></span> 249 - </li> 266 + <li class=" no-child"> 267 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-containers/castle-windsor/introducing-castle-windsor" class="bgg">10.1. Знакомство с Castle Windsor</a></span> 268 + </li> 269 + <li class=" no-child"> 270 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-containers/castle-windsor/managing-lifetime" class="bgg">10.2. Управление жизненным циклом</a></span> 271 + </li> 272 + <li class="current no-child"> 273 + <span class="bold"><a href="https://smarly.net/dependency-injection-in-net/di-containers/castle-windsor/working-with-multiple-components" class="bgg">10.3. Работа с составными компонентами</a></span> 274 + </li> 275 + <li class=" no-child"> 276 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-containers/castle-windsor/configuring-difficult-apis" class="bgg">10.4. Конфигурирование сложных API</a></span> 277 + </li> 278 + <li class=" no-child"> 279 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-containers/castle-windsor/summary" class="bgg">10.5. Резюме</a></span> 280 + </li> 250 250 251 - </ul> 252 - </li> 282 + </ul> 283 + </li> 284 + <li class=" "> 285 + <span class="have-child "><a href="https://smarly.net/dependency-injection-in-net/di-containers/structuremap" class="bgg">11. StructureMap</a></span> 286 + <ul> 287 + 253 253 254 - </ul> 255 - </li> 256 - <li class=" "> 257 - <span class="have-child "><a href="https://smarly.net/dependency-injection-in-net/di-containers" class="bgg">DI-контейнеры</a></span> 258 - <ul> 259 - 289 + <li class=" no-child"> 290 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-containers/structuremap/introducing-structuremap" class="bgg">11.1. Знакомство с StructureMap</a></span> 291 + </li> 292 + <li class=" no-child"> 293 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-containers/structuremap/managing-lifetime" class="bgg">11.2. Управление жизненным циклом</a></span> 294 + </li> 295 + <li class=" no-child"> 296 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-containers/structuremap/working-with-multiple-components" class="bgg">11.3. Работа с составными компонентами</a></span> 297 + </li> 298 + <li class=" no-child"> 299 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-containers/structuremap/configuring-difficult-apis" class="bgg">11.4. Конфигурирование сложных API</a></span> 300 + </li> 301 + <li class=" no-child"> 302 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-containers/structuremap/summary" class="bgg">11.5. Резюме</a></span> 303 + </li> 260 260 261 - <li class=" "> 262 - <span class="have-child "><a href="https://smarly.net/dependency-injection-in-net/di-containers/castle-windsor" class="bgg">10. Castle Windsor</a></span> 263 - <ul> 264 - 305 + </ul> 306 + </li> 307 + <li class=" "> 308 + <span class="have-child "><a href="https://smarly.net/dependency-injection-in-net/di-containers/spring-net" class="bgg">12. Spring.NET</a></span> 309 + <ul> 310 + 265 265 266 - 267 - castle-windsor/introducing-castle-windsor" class="bgg">10.1. Знакомство сCastle Windsor</a></span>268 - 269 - 270 - castle-windsor/managing-lifetime" class="bgg">10.2. Управление жизненным циклом</a></span>271 - 272 - currentno-child">273 - bold"><a href="https://smarly.net/dependency-injection-in-net/di-containers/castle-windsor/working-with-multiple-components" class="bgg">10.3. Работа с составными компонентами</a></span>274 - 275 - 276 - castle-windsor/configuring-difficult-apis" class="bgg">10.4. Конфигурирование сложных API</a></span>277 - 278 - 279 - castle-windsor/summary" class="bgg">10.5. Резюме</a></span>280 - 312 + <li class=" no-child"> 313 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-containers/spring-net/introducing-spring-net" class="bgg">12.1. Знакомство с Spring.NET</a></span> 314 + </li> 315 + <li class=" no-child"> 316 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-containers/spring-net/managing-lifetime" class="bgg">12.2. Управление жизненным циклом</a></span> 317 + </li> 318 + <li class=" no-child"> 319 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-containers/spring-net/working-with-multiple-components" class="bgg">12.3. Работа с составными компонентами</a></span> 320 + </li> 321 + <li class=" no-child"> 322 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-containers/spring-net/configuring-difficult-apis" class="bgg">12.4. Конфигурирование сложных API</a></span> 323 + </li> 324 + <li class=" no-child"> 325 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-containers/spring-net/summary" class="bgg">12.5. Резюме</a></span> 326 + </li> 281 281 282 - 283 - 284 - 285 - structuremap" class="bgg">11.StructureMap</a></span>286 - 287 - 328 + </ul> 329 + </li> 330 + <li class=" "> 331 + <span class="have-child "><a href="https://smarly.net/dependency-injection-in-net/di-containers/autofac" class="bgg">13. Autofac</a></span> 332 + <ul> 333 + 288 288 289 - 290 - structuremap/introducing-structuremap" class="bgg">11.1. Знакомство сStructureMap</a></span>291 - 292 - 293 - structuremap/managing-lifetime" class="bgg">11.2. Управление жизненным циклом</a></span>294 - 295 - 296 - structuremap/working-with-multiple-components" class="bgg">11.3. Работа с составными компонентами</a></span>297 - 298 - 299 - structuremap/configuring-difficult-apis" class="bgg">11.4.Конфигурированиесложных API</a></span>300 - 301 - 302 - structuremap/summary" class="bgg">11.5. Резюме</a></span>303 - 335 + <li class=" no-child"> 336 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-containers/autofac/introducing-autofac" class="bgg">13.1. Знакомство с Autofac</a></span> 337 + </li> 338 + <li class=" no-child"> 339 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-containers/autofac/managing-lifetime" class="bgg">13.2. Управление жизненным циклом</a></span> 340 + </li> 341 + <li class=" no-child"> 342 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-containers/autofac/working-with-multiple-components" class="bgg">13.3. Работа с составными компонентами</a></span> 343 + </li> 344 + <li class=" no-child"> 345 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-containers/autofac/registering-difficult-apis" class="bgg">13.4. Регистрация сложных API</a></span> 346 + </li> 347 + <li class=" no-child"> 348 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-containers/autofac/summary" class="bgg">13.5. Резюме</a></span> 349 + </li> 304 304 305 - 306 - 307 - 308 - spring-net" class="bgg">12.Spring.NET</a></span>309 - 310 - 351 + </ul> 352 + </li> 353 + <li class=" "> 354 + <span class="have-child "><a href="https://smarly.net/dependency-injection-in-net/di-containers/unity" class="bgg">14. Unity</a></span> 355 + <ul> 356 + 311 311 312 - 313 - spring-net/introducing-spring-net" class="bgg">12.1. Знакомство сSpring.NET</a></span>314 - 315 - 316 - spring-net/managing-lifetime" class="bgg">12.2. Управление жизненным циклом</a></span>317 - 318 - 319 - spring-net/working-with-multiple-components" class="bgg">12.3. Работа с составными компонентами</a></span>320 - 321 - 322 - spring-net/configuring-difficult-apis" class="bgg">12.4. Конфигурирование сложных API</a></span>323 - 324 - 325 - spring-net/summary" class="bgg">12.5. Резюме</a></span>326 - 358 + <li class=" no-child"> 359 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-containers/unity/introducing-unity" class="bgg">14.1. Знакомство с Unity</a></span> 360 + </li> 361 + <li class=" no-child"> 362 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-containers/unity/managing-lifetime" class="bgg">14.2. Управление жизненным циклом</a></span> 363 + </li> 364 + <li class=" no-child"> 365 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-containers/unity/working-with-multiple-components" class="bgg">14.3. Работа с составными компонентами</a></span> 366 + </li> 367 + <li class=" no-child"> 368 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-containers/unity/configuring-difficult-apis" class="bgg">14.4. Конфигурирование сложных API</a></span> 369 + </li> 370 + <li class=" no-child"> 371 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-containers/unity/summary" class="bgg">14.5. Резюме</a></span> 372 + </li> 327 327 328 - 329 - 330 - 331 - autofac" class="bgg">13.Autofac</a></span>332 - 333 - 374 + </ul> 375 + </li> 376 + <li class=" "> 377 + <span class="have-child "><a href="https://smarly.net/dependency-injection-in-net/di-containers/mef" class="bgg">15. MEF</a></span> 378 + <ul> 379 + 334 334 335 - 336 - autofac/introducing-autofac" class="bgg">13.1. Знакомство сAutofac</a></span>337 - 338 - 339 - autofac/managing-lifetime" class="bgg">13.2. Управление жизненным циклом</a></span>340 - 341 - 342 - autofac/working-with-multiple-components" class="bgg">13.3. Работа с составными компонентами</a></span>343 - 344 - 345 - autofac/registering-difficult-apis" class="bgg">13.4.Регистрациясложных API</a></span>346 - 347 - 348 - autofac/summary" class="bgg">13.5. Резюме</a></span>349 - 381 + <li class=" no-child"> 382 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-containers/mef/introducing-mef" class="bgg">15.1. Знакомство с MEF</a></span> 383 + </li> 384 + <li class=" no-child"> 385 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-containers/mef/managing-lifetime" class="bgg">15.2. Управление жизненным циклом</a></span> 386 + </li> 387 + <li class=" no-child"> 388 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-containers/mef/working-with-multiple-components" class="bgg">15.3. Работа с составными компонентами</a></span> 389 + </li> 390 + <li class=" no-child"> 391 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-containers/mef/composing-difficult-apis" class="bgg">15.4. Конфигурирование сложных API</a></span> 392 + </li> 393 + <li class=" no-child"> 394 + <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-containers/mef/summary" class="bgg">15.5. Резюме</a></span> 395 + </li> 350 350 351 - </ul> 352 - </li> 353 - <li class=" "> 354 - <span class="have-child "><a href="https://smarly.net/dependency-injection-in-net/di-containers/unity" class="bgg">14. Unity</a></span> 355 - <ul> 356 - 397 + </ul> 398 + </li> 357 357 358 - <li class=" no-child"> 359 - <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-containers/unity/introducing-unity" class="bgg">14.1. Знакомство с Unity</a></span> 360 - </li> 361 - <li class=" no-child"> 362 - <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-containers/unity/managing-lifetime" class="bgg">14.2. Управление жизненным циклом</a></span> 363 - </li> 364 - <li class=" no-child"> 365 - <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-containers/unity/working-with-multiple-components" class="bgg">14.3. Работа с составными компонентами</a></span> 366 - </li> 367 - <li class=" no-child"> 368 - <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-containers/unity/configuring-difficult-apis" class="bgg">14.4. Конфигурирование сложных API</a></span> 369 - </li> 370 - <li class=" no-child"> 371 - <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-containers/unity/summary" class="bgg">14.5. Резюме</a></span> 372 - </li> 400 + </ul> 401 + </li> 373 373 374 - </ul> 375 - </li> 376 - <li class=" "> 377 - <span class="have-child "><a href="https://smarly.net/dependency-injection-in-net/di-containers/mef" class="bgg">15. MEF</a></span> 378 - <ul> 379 - 380 - 381 - <li class=" no-child"> 382 - <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-containers/mef/introducing-mef" class="bgg">15.1. Знакомство с MEF</a></span> 383 - </li> 384 - <li class=" no-child"> 385 - <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-containers/mef/managing-lifetime" class="bgg">15.2. Управление жизненным циклом</a></span> 386 - </li> 387 - <li class=" no-child"> 388 - <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-containers/mef/working-with-multiple-components" class="bgg">15.3. Работа с составными компонентами</a></span> 389 - </li> 390 - <li class=" no-child"> 391 - <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-containers/mef/composing-difficult-apis" class="bgg">15.4. Конфигурирование сложных API</a></span> 392 - </li> 393 - <li class=" no-child"> 394 - <span class=""><a href="https://smarly.net/dependency-injection-in-net/di-containers/mef/summary" class="bgg">15.5. Резюме</a></span> 395 - </li> 396 - 397 - </ul> 398 - </li> 399 - 400 - </ul> 401 - </li> 402 - 403 - </ul> 404 -{{/html}} 405 - 403 + </ul>{{/html}}