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