Редактировал(а) Alexandr Fokin 2024/10/02 10:51

<
От версии < 9.1 >
отредактировано Alexandr Fokin
на 2020/02/12 13:13
К версии < 9.5 >
отредактировано Alexandr Fokin
на 2024/01/04 19:24
>
Изменить комментарий: К данной версии нет комментариев

Комментарий

Подробности

Свойства страницы
Содержимое
... ... @@ -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 -