Да, это клевая штука (я использую http://unity.codeplex.com/ в составе Microsoft Enterprise Library) для упрощения кода, уменьшения связности и грамотного тестирования частей веб-приложения.
При запросе (как и в подавляющем большинстве веб-приложений) идет попытка аутентификации пользователя, сбор данных о нём (из кукисов или базы) и сохранение "полного" пользователя...
Сохранение куда? Ответов на "кудаканье" много. Это может быть и контекст текущего запроса и сессия и те же самые кукисы и можно даже обратно в базу (наверное изврат, но кто знает...).
Контекст запроса или сессия до сего времени мне казались самым актуальным решением этой задачи. Затем в каком-либо месте кода, а точнее, в экземпляре класса, я, используя контекст или сессию, извлекаю пользователя.
Можно ли такой класс протестировать не в контексте веб-приложения? Хрен. Потому что нет ни контекста запроса ни сессии. А надо ли так тестировать, вне веб-приложения?
В исходном коде проекта OXITE, обнаружилась любопытная штука. Там реализовали-таки полностью абстрагированный от контекста запроса и сессии класс. Используя IoC-контейнер. Кратко, в контейнере регистрировался не экземпляр класса пользователя, а метод его получения. А метод получения, брал экземпляр класса пользователя из контекста запроса.
В итоге мы имеем класс, который ложит на то, в веб-приложении он существует или в любом другом. Он принимает пользователя из конструктора, всё остальное его не касается.
А вот безопасно ли доверять IoC-контейнеру, экземпляр класса пользователя (или метод его извлечения из контекста или сессии)? Хрен знает. Я пока не доверяю и переписал код в проекте. Несмотря на то, что это сделано разработчиками из Microsoft. :)