#asp.net-mvc #multithreading #nhibernate #ninject
#asp.net-mvc #многопоточность #nhibernate #ninject
Вопрос:
У меня настроено мое приложение MVC с Ninject и NHibernate. У меня есть несколько запросов, которые поступают, и все, что они делают, это ставят в очередь некоторую работу, запускают поток для обработки очереди и затем возвращаются.
Для моего сеанса NHibernate установлено значение ReqeustScope. теперь мой вопрос в том, уничтожает ли Ninject мой объект сеанса, как только запрос завершается? Или он сохранит его для порожденных потоков?
Ответ №1:
Я не очень знаком с NInject, но если он работает как другие контейнеры DI, я бы ожидал, что ваш сеанс будет недоступен после завершения запроса. Если вам нужно запустить фоновый процесс в том же домене приложения, вы могли бы рассмотреть возможность предоставления двух путей для разрешения ISessions, один с использованием ThreadScope для доступа к вашим фоновым потокам, а другой с использованием RequestScope для веб-части приложения. Просто будьте осторожны, если вам нужно передать объекты, полученные с помощью веб-сеанса, в фоновый поток.
Если вы можете разделить свои фоновые процессы на другой домен приложения, вы также можете создать пользовательскую область, которая проверяет наличие HttpContext, а затем решает, какую область использовать.
Ответ №2:
Ответ — да, Ninject попытается деактивировать объект сеанса в какой-то момент после того, как HttpContext будет собран мусором. Смотрите это сообщение в блоге:
http://kohari.org/2009/03/06/cache-and-collect-lifecycle-management-in-ninject-20/