StructureMap возвращает склонный nHibenrate объект сессии из потока локальный объем

[ИЛИ] Как определить жизненный цикл StructureMap для UoW, который будет использован кварцевыми заданиями и запросами HTTP

У меня есть это веб-приложение, которое использует СМ для МОК. Я использую объем HybridHttpOrThreadLocalScoped, чтобы хранить мои объекты nHibernate ISession. Это работает хорошо на сессии на вид запроса для моих веб-запросов.

Но у меня также есть quartz.net, который планирует несколько заданий. Задание использует ту же единицу работы для получения объекта ISession. В этом сценарии, когда планировщик запускают задание, все хорошо работает сначала и прогоны задания, прекрасные в течение нескольких раз, ПОКА идентификатор потока задания не повторяется.

Предположите, что, когда задание планируется, оно начинает работать в потоках с идентификаторами 11, 12, 13, и затем с идентификатором 11 потока снова. В этой точке structuremap возвращает объект сессии, который уже расположен, и я получаю "Систему. ObjectDisposedException: Сеанс закрыт!" ошибка.

Таким образом от того, что я вижу, сессия сохранена в локальной памяти потока и после того, как я располагаю сессию в конце своей единицы работы, объект сессии все еще сохранен в локальной памяти потока. Кажется, что после того, как поток завершается, его локальное устройство хранения данных не очищено и так или иначе когда новый поток с тем же идентификатором создается, structuremap ищет сессию в старой локальной памяти потока (который, как предполагается, очищен для нового потока, которому я верю), и возвращает объект сессии, который уже расположен.

Вопросы:

  1. Существует ли способ очистить локальную память потока (после завершения)?
  2. Существует ли эквивалент "ReleaseAndDisposeAllHttpScopedObjects" для ограниченных по объему потоком объектов?
  3. Существует ли способ аннулировать (или извлечься) склонный объект поэтому, даже если бы SM ищет его затем, это не нашло бы никого и должно создать новый экземпляр?

Я надеюсь, что ясно дал понять свой вопрос. Это заняло несколько часов моего времени, и тем не менее я не нашел путь вокруг этого. Я ценю любую подсказку:>

Обновление: Я добавил свое собственное решение сделать UoW обслуживаемым работой StructureMap с обоими запросами HTTP и кварцевыми заданиями. Сообщите мне, есть ли у Вас лучшее/легче/простое решение.

7
задан kaptan 12 July 2011 в 23:26
поделиться