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