Версия 9.4 от Alexandr Fokin на 2024/01/04 19:24

Скрыть последних авторов
Alexandr Fokin 9.2 1 | |В данной книге рассматриваются концепции DI и IOC. А также приводятся примеры взаимодействия с framework IOC контейнерами.
2 Приводятся примеры паттернов и анти-паттернов.
Alexandr Fokin 3.1 3 Управление жизненным циклом зависимостей.
Alexandr Fokin 9.2 4 | |(((
5 |(% style="width:363px" %)Преобразование абстракций в конкретные типы
6 (Процесс разрешения)|(% style="width:1087px" %)(((
7 [[image:DI IOC.jpg]]
Alexandr Fokin 5.1 8
Alexandr Fokin 9.2 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 )))
Alexandr Fokin 9.3 22 | |
23
24
25 ----
26
Alexandr Fokin 9.4 27 {{html}}
28 <ul>
Alexandr Fokin 9.2 29
Alexandr Fokin 5.1 30
Alexandr Fokin 9.2 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
Alexandr Fokin 8.1 35
Alexandr Fokin 9.2 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
Alexandr Fokin 8.1 40
Alexandr Fokin 9.2 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>
Alexandr Fokin 9.1 56
Alexandr Fokin 9.2 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
Alexandr Fokin 8.1 63
Alexandr Fokin 9.2 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>
Alexandr Fokin 8.1 76
Alexandr Fokin 9.2 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
Alexandr Fokin 8.1 83
Alexandr Fokin 9.2 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>
Alexandr Fokin 8.1 99
Alexandr Fokin 9.2 100 </ul>
101 </li>
Alexandr Fokin 8.1 102
Alexandr Fokin 9.2 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
Alexandr Fokin 8.1 109
Alexandr Fokin 9.2 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
Alexandr Fokin 8.1 114
Alexandr Fokin 9.2 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>
Alexandr Fokin 8.1 130
Alexandr Fokin 9.2 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
Alexandr Fokin 8.1 137
Alexandr Fokin 9.2 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>
Alexandr Fokin 8.1 153
Alexandr Fokin 9.2 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
Alexandr Fokin 8.1 160
Alexandr Fokin 9.2 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>
Alexandr Fokin 8.1 179
Alexandr Fokin 9.2 180 </ul>
181 </li>
Alexandr Fokin 8.1 182
Alexandr Fokin 9.2 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
Alexandr Fokin 8.1 189
Alexandr Fokin 9.2 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
Alexandr Fokin 8.1 194
Alexandr Fokin 9.2 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>
Alexandr Fokin 8.1 216
Alexandr Fokin 9.2 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
Alexandr Fokin 8.1 223
Alexandr Fokin 9.2 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>
Alexandr Fokin 8.1 236
Alexandr Fokin 9.2 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
Alexandr Fokin 8.1 243
Alexandr Fokin 9.2 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>
Alexandr Fokin 8.1 256
Alexandr Fokin 9.2 257 </ul>
258 </li>
Alexandr Fokin 8.1 259
Alexandr Fokin 9.2 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
Alexandr Fokin 8.1 266
Alexandr Fokin 9.2 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
Alexandr Fokin 8.1 271
Alexandr Fokin 9.2 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>
Alexandr Fokin 8.1 287
Alexandr Fokin 9.2 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
Alexandr Fokin 8.1 294
Alexandr Fokin 9.2 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>
Alexandr Fokin 8.1 310
Alexandr Fokin 9.2 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
Alexandr Fokin 8.1 317
Alexandr Fokin 9.2 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>
Alexandr Fokin 8.1 333
Alexandr Fokin 9.2 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
Alexandr Fokin 8.1 340
Alexandr Fokin 9.2 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>
Alexandr Fokin 8.1 356
Alexandr Fokin 9.2 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
Alexandr Fokin 8.1 363
Alexandr Fokin 9.2 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>
Alexandr Fokin 8.1 379
Alexandr Fokin 9.2 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
Alexandr Fokin 8.1 386
Alexandr Fokin 9.2 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>
Alexandr Fokin 8.1 402
Alexandr Fokin 9.2 403 </ul>
404 </li>
Alexandr Fokin 8.1 405
Alexandr Fokin 9.2 406 </ul>
407 </li>
Alexandr Fokin 8.1 408
Alexandr Fokin 9.4 409 </ul>
410 {{/html}}