---
title: "В каких случая, использование IoC-контейнера, будет злоупотреблением?"
description: "Да, это клевая штука (я использую http://unity.codeplex.com/ в составе Microsoft Enterprise Library)..."
author: "tarakanoffth"
published: "2011-01-20T22:21:34+00:00"
modified: "2011-01-20T22:21:34+00:00"
locale: "ru"
canonical_url: "https://yvision.kz/post/v-kakih-sluchaya-ispolzovanie-ioc-konteynera-budet-zloupotrebleniem-109499"
markdown_url: "https://yvision.kz/post/v-kakih-sluchaya-ispolzovanie-ioc-konteynera-budet-zloupotrebleniem-109499/markdown"
site_name: "Yvision.kz"
---

# В каких случая, использование IoC-контейнера, будет злоупотреблением?

> Да, это клевая штука (я использую http://unity.codeplex.com/ в составе Microsoft Enterprise Library)...

Да, это клевая штука (я использую [http://unity.codeplex.com/](http://unity.codeplex.com/) в составе Microsoft Enterprise Library) для упрощения кода, уменьшения связности и грамотного тестирования частей веб-приложения.

При запросе (как и в подавляющем большинстве веб-приложений) идет попытка аутентификации пользователя, сбор данных о нём (из кукисов или базы) и сохранение "полного" пользователя...

Сохранение куда? Ответов на "кудаканье" много. Это может быть и контекст текущего запроса и сессия и те же самые кукисы и можно даже обратно в базу (наверное изврат, но кто знает...).

Контекст запроса или сессия до сего времени мне казались самым актуальным решением этой задачи. Затем в каком-либо месте кода, а точнее, в экземпляре класса, я, используя контекст или сессию, извлекаю пользователя.

Можно ли такой класс протестировать не в контексте веб-приложения? Хрен. Потому что нет ни контекста запроса ни сессии. А надо ли так тестировать, вне веб-приложения?

В исходном коде проекта [OXITE](http://oxite.net), обнаружилась любопытная штука. Там реализовали-таки полностью абстрагированный от контекста запроса и сессии класс. Используя IoC-контейнер. Кратко, в контейнере регистрировался не экземпляр класса пользователя, а метод его получения. А метод получения, брал экземпляр класса пользователя из контекста запроса.

В итоге мы имеем класс, который ложит на то, в веб-приложении он существует или в любом другом. Он принимает пользователя из конструктора, всё остальное его не касается.

А вот безопасно ли доверять IoC-контейнеру, экземпляр класса пользователя (или метод его извлечения из контекста или сессии)? Хрен знает. Я пока не доверяю и переписал код в проекте. Несмотря на то, что это сделано разработчиками из Microsoft. :)

### Microsoft Enterprise Library

---

Source: [https://yvision.kz/post/v-kakih-sluchaya-ispolzovanie-ioc-konteynera-budet-zloupotrebleniem-109499](https://yvision.kz/post/v-kakih-sluchaya-ispolzovanie-ioc-konteynera-budet-zloupotrebleniem-109499)