[ИЛИ] Как определить жизненный цикл StructureMap для UoW, который будет использован кварцевыми заданиями и запросами HTTP
У меня есть это веб-приложение, которое использует СМ для МОК. Я использую объем HybridHttpOrThreadLocalScoped, чтобы хранить мои объекты nHibernate ISession. Это работает хорошо на сессии на вид запроса для моих веб-запросов.
Но у меня также есть quartz.net, который планирует несколько заданий. Задание использует ту же единицу работы для получения объекта ISession. В этом сценарии, когда планировщик запускают задание, все хорошо работает сначала и прогоны задания, прекрасные в течение нескольких раз, ПОКА идентификатор потока задания не повторяется.
Предположите, что, когда задание планируется, оно начинает работать в потоках с идентификаторами 11, 12, 13, и затем с идентификатором 11 потока снова. В этой точке structuremap возвращает объект сессии, который уже расположен, и я получаю "Систему. ObjectDisposedException: Сеанс закрыт!" ошибка.
Таким образом от того, что я вижу, сессия сохранена в локальной памяти потока и после того, как я располагаю сессию в конце своей единицы работы, объект сессии все еще сохранен в локальной памяти потока. Кажется, что после того, как поток завершается, его локальное устройство хранения данных не очищено и так или иначе когда новый поток с тем же идентификатором создается, structuremap ищет сессию в старой локальной памяти потока (который, как предполагается, очищен для нового потока, которому я верю), и возвращает объект сессии, который уже расположен.
Вопросы:
Я надеюсь, что ясно дал понять свой вопрос. Это заняло несколько часов моего времени, и тем не менее я не нашел путь вокруг этого. Я ценю любую подсказку:>
Обновление: Я добавил свое собственное решение сделать UoW обслуживаемым работой StructureMap с обоими запросами HTTP и кварцевыми заданиями. Сообщите мне, есть ли у Вас лучшее/легче/простое решение.