Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка под ASP.NET > HttpApplication в не System.Web классе


Автор: sysprog 16.12.2008, 18:26
Добрый день.

Господа, прошу вашей помощи!

Есть веб сайт, который использует некоторую библиотеку классов.
Необходимо получить доступ к текущему HttpApplication в каком-нибудь классе не передавая его как параметр в этот класс. Т.е. можно ли его вытащить через AppDomain или каким-нибудь другим способом?

Благодарю!

Автор: 1stain 16.12.2008, 20:47
Код

HttpContext.Current.ApplicationInstance

Автор: sysprog 18.12.2008, 21:47
Цитата(1stain @ 16.12.2008,  20:47)
Код

HttpContext.Current.ApplicationInstance

Дело то как раз и было в том, что пытаюсь получить доступ из другого контекста.

Я искал какое-то подобие фабрики для получения HTTPApplication
В общем, решение нашлось простое и логичное - написал свою фабрику, в которую поместил информацию, которая мне нужна в других объектах. Только не понятно, почему MS не предусмотрели стандартного аналогичного механизма.

Автор: PashaPash 19.12.2008, 01:33
sysprog, HttpContext.Current - статическое свойство. Оно доступно вообще из любого места приложения. Из какого "другого" контекста ты не смог его получить? И что за "фабрики для хранения информации" - так теперь называют глобальные переменные? :(

Автор: Zakonnic 19.12.2008, 12:18
Ну вроде как "фабрика" - это один из шаблонов проектирования, так что все нормально. Насколько я знаю, аспнет-приложением, например, рулит фабрика хендлеров (IHttpHandlerFactory). Правда, я тоже не понял, как это автор реализовал...

Автор: PashaPash 19.12.2008, 18:17
Zakonnic, я знаю что такое фабрика, поэтому и спросил smile

Автор: sysprog 19.12.2008, 20:37
Да, лоханулся я с : HttpContext.Current  smile   smile  
Не дочитал, что он статический...  :(

Приходится на 10 языках постоянно разговаривать с программистами на одном, с клиентами на другом, с начальством на третьем и т.д. 
Прошу прощения за формулировку! smile


Реализовал просто - простая фабрика классов, которая по запросу создает один экземпляр какого-то нужного известного класса и кладет это в статический Dictionary, откуда потом достает при надобности! smile 
С другой стороны своей реализацией упростил задачу себе же задачу, т.к. мне еще необходимо было хранить ID пользователя из БД и дополнительные поля, т.е. просто создал класс и забил его нужными свойствами.

Благодарю за внимание и помощь!

Автор: PashaPash 19.12.2008, 22:09
sysprog, посмотри в сторону отказа от синглтонов и перехода на StructureMap/Unity. Cтатический Dictionary - не лучший выбор.

Автор: sysprog 22.12.2008, 03:17
Цитата(PashaPash @  19.12.2008,  22:09 Найти цитируемый пост)
sysprog, посмотри в сторону отказа от синглтонов и перехода на StructureMap/Unity. Cтатический Dictionary - не лучший выбор. 


Можно немного подробней? Интересно проблемы со статическим Dictionary!


Цитата

StructureMap is a Dependency Injection framework that can be used to improve the architectural qualities of an object oriented system by reducing the mechanical costs of good design techniques. StructureMap can enable looser coupling between classes and their dependencies, improve the testability of a class structure, and provide generic flexibility mechanisms. Used judiciously, StructureMap can greatly enhance the opportunities for code reuse by minimizing direct coupling between classes and configuration mechanisms.


Описано вроде красиво smile Можно в сжатом виде, для чего используется, какие преимущества и недостатки?

Автор: 1stain 22.12.2008, 09:36
Цитата(sysprog @  19.12.2008,  20:37 Найти цитируемый пост)
С другой стороны своей реализацией упростил задачу себе же задачу, т.к. мне еще необходимо было хранить ID пользователя из БД и дополнительные поля, т.е. просто создал класс и забил его нужными свойствами.

Вы уверены, что так проще? 
По-моему проще - это создать класс юзера со всеми необходимыми полями, отнаследовав его от IPrincipal и подсунуть контексту как значение свойства User.

Автор: PashaPash 22.12.2008, 14:07
Цитата(sysprog @  22.12.2008,  03:17 Найти цитируемый пост)
Можно немного подробней? Интересно проблемы со статическим Dictionary!

Да вполне обычные пролемы, как и со всеми сингтонами - синхронизация, лишние локи, возможное создание двух Dictionary одновременно (при ресайкле приложения, например), вообще наличие долгоживущих глобальных переменных, проблемы масштабируемостью - кто-нибудь обязательно напишет код, передающий данные через объект в этом Dictionary. Синглтоны - вообще зло.
Цитата(sysprog @  22.12.2008,  03:17 Найти цитируемый пост)
Описано вроде красиво smile Можно в сжатом виде, для чего используется, какие преимущества и недостатки? 

Достоинства - берет на себя управление зависимостями в проекте. Т.е. позволяет из любого места получить объект с нужным тебе интерфейсом. Примерно как твоя фабрика на Dictionary, только она создает не только один конкретный класс по ключу (интерфейсу), а еще и все объекты, от которых он зависит. И заодно берет на себя управление временем жизни - может выдавать один и тот же объект на каждый запрос (типа синглтон), может создавать каждый раз разный, может ограничивать время жизни одинм HttpRequest. Недостатки - это все-таки лишний кусок чужого кода smile

Автор: sysprog 22.12.2008, 20:37
Цитата(1stain @  22.12.2008,  09:36 Найти цитируемый пост)
Вы уверены, что так проще? 
По-моему проще - это создать класс юзера со всеми необходимыми полями, отнаследовав его от IPrincipal и подсунуть контексту как значение свойства User. 


Спасибо за информацию!! Знания не настолько глубоки. 
У меня правда еще MembershipProvider, нужно будет проверить получится ли таким образом юзера проинициализировать...

Цитата(PashaPash @  22.12.2008,  14:07 Найти цитируемый пост)
Достоинства - берет на себя управление зависимостями в проекте. Т.е. позволяет из любого места получить объект с нужным тебе интерфейсом. Примерно как твоя фабрика на Dictionary, только она создает не только один конкретный класс по ключу (интерфейсу), а еще и все объекты, от которых он зависит. И заодно берет на себя управление временем жизни - может выдавать один и тот же объект на каждый запрос (типа синглтон), может создавать каждый раз разный, может ограничивать время жизни одинм HttpRequest. Недостатки - это все-таки лишний кусок чужого кода smile 


PashaPash, спасибо за совет. Система действиетельно интересная, но боюсь, что клиент не одобрит сторонний опенсорс. Случайно, не в курсе как с безопасностью у них дела?

Автор: PashaPash 22.12.2008, 20:49
Цитата(sysprog @  22.12.2008,  20:37 Найти цитируемый пост)
PashaPash, спасибо за совет. Система действиетельно интересная, но боюсь, что клиент не одобрит сторонний опенсорс. Случайно, не в курсе как с безопасностью у них дела?

Тогда бери Unity, из Microsoft Enterprise Library. Умеет то же, даже немного больше. И документация у них неплохая.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)