HttpApplicationState вне веб-проекта (библиотека классов)
У меня есть веб-приложение ASP.net, которое использует бизнес-логику для отдельного проекта библиотеки классов DLL. Однако я бы хотел использовать глобальный HttpApplicationState в проекте DLL. Но это похоже на реализацию конкретного веб-проекта.
Конечно, у меня могут быть конструкторы (или методы) определенных классов, принимающие HttpApplicationState в качестве параметра, но мне интересно, есть ли более красноречивый способ сделать это. Я понимаю, что создаю некоторые проблемы дизайна, но я действительно хотел бы иметь возможность использовать глобальные вещи в моей бизнес-логике.
2 ответа
Вы должны попытаться разделить проблемы между веб-приложением и библиотеками классов. Библиотеки классов должны иметь как можно меньше знаний о том, что их вызывает веб-приложение. В частности, они не должны использовать состояние сеанса или состояние приложения. На самом деле, они не должны иметь никаких ссылок на System.Web.dll!
Попросите веб-приложение передать библиотеке классов фрагменты приложения, в которых она нуждается. Библиотека классов не должна знать о том, что данные пришли из состояния приложения.
Это также значительно упростит модульное тестирование библиотеки классов, поскольку ее можно будет вызывать из среды модульного тестирования.
С помощью HttpContext.Current.Application
Вы должны иметь доступ к HttpApplicationState во внешних классах.
Обновить
Но я согласен с Джоном Сондерсом - бизнес-логика не должна знать, откуда она вызывается.