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