2013-07-19 3 views
0

У меня есть веб-приложение ASP.net, которое опирается на отдельный проект библиотеки классов DLL для своей бизнес-логики. Тем не менее, я хотел бы использовать глобальный HttpApplicationState в проекте DLL. Но это похоже на реализацию веб-проекта.HttpApplicationState за пределами веб-проекта (библиотека классов)

Конечно, у меня могут быть конструкторы (или методы) определенных классов, которые принимают HttpApplicationState как параметр, но мне интересно, есть ли более красноречивый способ сделать это. Я понимаю, что я создаю некоторые проблемы с дизайном, но мне очень хотелось бы использовать глобальные вещи в моей бизнес-логике.

ответ

1

Вы должны попытаться отделить проблемы между веб-приложением и библиотеками классов. Библиотеки классов должны иметь как можно меньше знаний о том, что их вызывает веб-приложение. В частности, они не должны использовать состояние сеанса или состояние приложения. На самом деле они не должны иметь ссылки на System.Web.dll!

Попросите веб-приложение передать библиотеке классов части приложения, которые необходимы библиотеке классов. Библиотека классов не должна знать, что данные поступают из состояния приложения.

Это также упростит модульную проверку библиотеки классов, так как это можно будет назвать ее из единой тестовой среды.

+0

Я ищу, чтобы реализовать шаблон пула объектов, и действительно надеялся полагаться на состояние приложения для некоторой механизации его ... Я хочу удержать и повторно использовать соединения с базами данных между страницами. В настоящее время объекты моей бизнес-логики инициализируют соединения с базой данных, а поскольку клиент переходит со страницы на страницу, эти соединения повторно инициализируются, что создает некоторые проблемы. Поэтому, в идеале, я бы хотел, чтобы мой BLL мог использовать какой-то пул, чтобы эти соединения не удалялись GC. Есть ли другой образец, который я мог бы использовать для этого? –

+0

Это не шаблон, в котором проблема - это хранилище персистентности. Почему бы просто не использовать «статические» данные (с надлежащей блокировкой) для хранения объектов. Кроме того, у большинства клиентов базы данных есть пул соединений, поэтому вам, возможно, даже не нужно делать свои собственные. –

2

Используя HttpContext.Current.Application, вы должны иметь доступ к HttpApplicationState во внешних классах.

Update

Но я согласен с Джоном Сондерс - бизнес-логика не должны знать о том, где она вызывается.

Смежные вопросы